单元测试——多次运行的最佳实践
本文关键字:最佳 运行 单元测试 | 更新日期: 2023-09-27 17:52:59
我想找到最好的方法(最少的代码/努力)运行一堆不同的测试与变化的数据和环境。
例如,现在我有一个测试:
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位进程中重复所有测试。我最近发现了一个只在单元测试中出现的bug,因为mstest在32位进程下运行测试(很多不安全的代码……
此外,我不绑定使用mstest,但visual studio集成将是很好的。在未来,与构建脚本/持续集成的简单集成也会很好。
如果您想让每个测试显示为不同的报告结果,那么将test32封装在每组条件中。有点像这样……
[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.
}
从测试执行的角度来看,位应该无关紧要,您是在测试代码而不是它的依赖项。考虑将测试重点放在bug周围的区域(如果它真的是位错误而不是你的代码)。
你可以在VS 2013中打开64位测试(完整的说明在这里)
从Visual Studio菜单中选择"测试",然后选择"设置",然后然后选择"处理器架构"。选择x64以运行测试64位的过程。
如果你不介意使用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"}
};
}
命名为:
的测试结果- TestSomeStuff(1、2、"Case1")
- TestSomeStuff(2 2例2)
如果您不喜欢基于提供给测试的参数的默认命名,您也可以提供一个TestName,尽管它有点复杂。
您可以将Xunit及其理论属性与内联数据属性结合使用,以管道输入您的值