单元测试一些输入的各种foreach

Wer*_*ght 1 c# foreach unit-testing

特别是对于C#单元测试,如何针对各种输入或输入矩阵进行测试运行?

我经常有单元测试的情况做出输入矩阵,但通常可以通过检查输入列表来合理地解决.

最简单的情况是测试添加:

  • 0 + 0 = 0
  • 1 + 0 = 1
  • 0 + -1 = -1
  • 1 + -1 = 0

将对每个输入进行相同的测试(在该示例中,有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]所有输入都会调用一次.

你的解决方案是什么?

是否有一些我不知道的功能可以帮助那些案例?

Mar*_*rke 5

如果您正在使用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)