Wer*_*ght 1 c# foreach unit-testing
特别是对于C#单元测试,如何针对各种输入或输入矩阵进行测试运行?
我经常有单元测试的情况做出输入矩阵,但通常可以通过检查输入列表来合理地解决.
最简单的情况是测试添加:
将对每个输入进行相同的测试(在该示例中,有4个输入,每个输入与一些预期输出相关联.
在简单的解决办法是:
object[] inputs = ...
foreach (var input in inputs)
// Put Assert here
Run Code Online (Sandbox Code Playgroud)
问题在于,当您运行测试时,除非您在消息日志中手动包含足够的详细信息,否则它不会告知哪个输入失败.
另一个解决方案是展开循环(如下所示).堆栈跟踪然后给出哪个输入失败,这允许再次运行单个输入的测试.
TestAddition(0, 0, 0);
TestAddition(1, 0, 1);
TestAddition(0, -1, -1);
TestAddition(1, -1, 0);
Run Code Online (Sandbox Code Playgroud)
最后但并非最不重要的是,像FitNess这样的解决方案似乎有助于此类案例,但也增加了很多复杂性,似乎不适合标准C#开发.
所有这些解决方案都不适用于灯具,因为[TestInitialize]所有输入都会调用一次.
你的解决方案是什么?
是否有一些我不知道的功能可以帮助那些案例?
如果您正在使用NUnit,则应该查看TestCase属性.
[TestCase(0,0,0)]
[TestCase(1,0,1)]
[TestCase(0,-1,-1)]
[TestCase(1,-1, 0)]
public void AdditionTest(int x, int y, int z)
{
Assert.AreEqual( z, x+y );
}
Run Code Online (Sandbox Code Playgroud)