我想找到最好的方法(最少的代码/努力)来运行一系列不同的测试,改变数据和环境。
例如,我现在有一个测试:
public void TestI32(Type inspectable, MemberInfo member)
{
Assert...
}
我想要的是什么:
[TestMethod]
public void ClassTests()
{
var arg1 = ...
TestI32(arg1, arg2, "Class");
TestI16(arg1, arg2, "Class");
TestFoo(arg1, arg2, "Class");
TestBar(arg1, arg2, "Class");
}
并将每个方法调用显示为单独的测试,并将该字符串作为名称的一部分。
我还想重复32位和64位进程的所有测试。我最近发现了一个只出现在单元测试中的错误,只是因为mstest在32位进程下运行测试(很多不安全的代码......
另外,我并不依赖于使用mstest,但视觉工作室集成会很好。将来,与构建脚本/持续集成的轻松集成也会很好。
答案 0 :(得分:1)
如果您希望将每个测试显示为不同的报告结果,请在每组条件中包装TestI32。有点像......
[TestMethod]
public void TestA()
{
var result = TestI32(arg1, arg2);
Assert.IsTrue(result); // or whatever your assertion is.
}
[TestMethod]
public void TestB()
{
var result = TestI32(arg3, arg4);
Assert.IsFalse(result); // or whatever your assertion is.
}
从测试执行的角度来看,Bitness无关紧要,您正在测试代码而不是其依赖项。考虑将测试集中在bug周围的区域(如果它真的是一个错误而不是你的代码)。
您可以在VS 2013中启用64位测试(完整说明here)
从Visual Studio菜单中选择“测试”,然后选择“设置” 然后选择Processor Architecture。选择x64以将测试作为a运行 64位进程。
答案 1 :(得分:0)
你可以将Xunit及其理论属性与inlinedata属性结合使用来管道你的值
答案 2 :(得分:0)
如果您不介意使用NUnit(如果从Nuget安装NUnit TestAdapter软件包,则可以进行VS集成),您可以使用TestCaseSource属性。您可以使用它指向属性/字段甚至方法。例如:
[TestCaseSource("SomeMethodSource")]
public void TestSomeStuff(int x, int y, string text) {
}
private IEnumerable SomeMethodSource() {
int someValue = 1;
return new object[] {
new object [] {someValue++,2, "Case1"},
new object [] {someValue++,5, "Case2"}
};
}
测试结果命名:
如果你不喜欢默认命名,根据提供给测试的参数,你也可以提供一个TestName,虽然它有点复杂。