NUnit 参数化测试的 MSTest 等价物? ?

NUnit 支持一个特性,在这个特性中,您可以为要多次运行的单元测试指定一组数据输入。

[RowTest]
[Row(1001,1,2,3)]
[Row(1,1001,2,3)]
[Row(1,2,1001,3)]
public void SumTests(int x, int y, int z, int expected)
{
...
}

使用 MSTest 完成这类事情的最佳方法是什么?我找不到类似的属性集。

31178 次浏览

这个有用吗?

本周我添加了一些单元测试 到由 TFS 管理的项目, 所以我决定使用“核心”单元 可用的测试框架 VS2008不幸的是,它没有 但是它有一个类似的 称为数据驱动单元测试的特性。 用这种方法,就会多一点 复杂的实施“简单” RowTest 场景,但它也允许 实施更复杂的计划。

您可以通过编写一个小的 mstest 扩展来实现这个功能,如下所示。

Http://blogs.msdn.com/b/vstsqualitytools/archive/2009/09/04/extending-the-visual-studio-unit-test-type-part-2.aspx

您可以使用测试方法和参数作为虚拟属性创建基类。 从此类继承时,只需用所需的值重写属性。 请参阅示例代码:

public class Operation
{
public static int Add(int x, int y)
{
return x + y;
}
}


[TestClass]
public class AddTests : WorkItemTest
{
protected virtual int First{get { return 0; }}
protected virtual int Second{get { return 0; }}


[TestInitialize]
public virtual void Init()
{
//Init code
}


[TestCleanup]
public virtual void Clean()
{
//Clean code
}


[TestMethod]
[Description("x+y = y+x")]
public virtual void Test_operation_commutativity()
{
Assert.AreEqual(Operation.Add(Second, First), Operation.Add(First, Second));
}
}


[TestClass]
public class AddPositiveTest : AddTests
{
protected override int First { get { return 1; } }
protected override int Second { get { return 2; } }
}


[TestClass]
public class AddNegativeTest : AddTests
{
protected override int First { get { return -1; } }
protected override int Second { get { return -2; } }
}

我的回答类似于@oscar-e-fraxedas-tormo one。
您可以从其中一个生成的类中进行子类化,该类中包含1到100个测试方法,并在派生类中提供所有测试逻辑。 在下面的例子中:

[TestClass]
public class Ha_ha_ha_Test: MsTestRows.Rows.TestRows_42<string>
{
public override void TestMethod(string dataRow, int rowNumber)
{
Console.WriteLine(dataRow);
Assert.IsFalse(dataRow.Contains("3"));
}


public override string GetNextDataRow(int rowNumber)
{
return "data" + rowNumber;
}
}

Ha_ha_ha_Test将包含 42生成的行(方法)。对于此行中的每一行,将调用自定义方法 GetNextDataRow以提供所需的测试数据。

更多细节:

Https://github.com/dzhariy/mstest-rows

实际上,参数化单元测试(PUT)是单元测试的自然推广。微软研究院有一个名为 Pex 的项目,它将自动为您的类待测(CUT)生成 PUT。Pex 是 自动测试输入生成工具。Pex 工具将找到 CUT 参数的 感兴趣的输入,并相应地生成单元测试用例,而不是自己准备测试数据。请检查 给你

对于那些使用 MSTest2的用户,DataRow + DataTestMethod 完全可以做到这一点:

[DataRow(Enum.Item1, "Name1", 123)]
[DataRow(Enum.Item2, "Name2", 123)]
[DataRow(Enum.Item3, "Name3", 456)]
[DataTestMethod]
public void FooTest(EnumType item, string name, string number)
{
var response = ExecuteYourCode(item, name, number);


Assert.AreEqual(item, response.item);
}

更多关于它 给你