【发布时间】:2010-06-30 14:34:13
【问题描述】:
特别是对于C#单元测试,如何为各种输入或输入矩阵进行测试?
我经常遇到单元测试制作输入矩阵的情况,但通常可以通过检查输入列表来合理解决。
最简单的情况是测试加法:
- 0 + 0 = 0
- 1 + 0 = 1
- 0 + -1 = -1
- 1 + -1 = 0
将对这些输入中的每一个进行相同的测试(在此示例中,有 4 个输入,每个都与一些预期的输出相关联。
简单的解决方案是:
object[] inputs = ...
foreach (var input in inputs)
// Put Assert here
问题在于,当您运行测试时,它不会告诉您失败的输入是什么,除非您在消息日志中包含足够的详细信息手动。
另一种解决方案是展开循环(如下所示)。然后堆栈跟踪给出哪个输入失败,这允许再次运行单个输入的测试。
TestAddition(0, 0, 0);
TestAddition(1, 0, 1);
TestAddition(0, -1, -1);
TestAddition(1, -1, 0);
最后但并非最不重要的是,像 FitNess 这样的解决方案似乎有助于此类情况,但也增加了很多复杂性,似乎不太适合标准 C# 开发。
所有这些解决方案都不适用于固定装置,因为所有输入都会调用一次 [TestInitialize]。
你的解决方案是什么?
是否有一些我不知道的功能可以帮助这些情况?
【问题讨论】:
标签: c# unit-testing foreach