MSTest相当于关的参数化测试?
-
23-09-2019 - |
题
关支持一个功能,可以指定的一组数据输入单元的测试,以进行多次。
[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?我不能找到一个类似的设定的属性。
解决方案
将此帮助?
此周我被添加一些单元测试 到通过TFS管理的项目, 所以我决定用“芯”单元 测试框架可用 VS2008,不幸的是它不 支持RowTests。但它有一个类似的 功能叫做数据驱动的单元测试。 用这种方法这是一个有点多 复杂实行“简单” RowTest的场景,但它也可以让 实施更复杂的。
其他提示
对于那些使用MSTest2,数据行+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);
}
更多关于它 在这里,
你可以拥有这种能力通过编写一个小的扩展mstest如下所示。
实际上,参数化单元测试(PUT)是单元测试的自然推广。和微软研究院有一个名为Pex的项目,将生成您在测试类(CUT)自动PUT。 PEX是自动测试输入生成工具。代替自己准备测试数据时,工具的Pex会发现的感兴趣的输入为CUT的参数,并相应地生成单元测试用例。请检查这里。
我的回答是similuar到@奥斯卡-E-fraxedas-TORMO之一。结果 可以从该从内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
将为了提供所需的测试数据被调用。
更多细节:
可以创建与测试方法和参数作为虚拟性质的基类。 当你从该类继承你只需要覆盖所需值的属性。 请参阅示例代码:
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; } }
}
不隶属于 StackOverflow