当我们有多个值时,我们想要测试给定的方法,我们应该在单个测试中循环遍历值吗?
或者如果失败可能更难确定原因?
这样的事情:
testSomething(){
List myValues = {'value1', 'value2', 'value3', ...}
for(value: myValues){
assertTrue(Something(Value))
}
}
答案 0 :(得分:3)
如果可以避免则不行
我的意思是,根据您用于进行单元测试的内容,您可能无法真实地避免它。在这种情况下,按需要做
如果你在一个循环中运行你的断言,你实际上有一个测试正在测试任意数量的东西。这会让人感到困惑。
你想要的是多个测试,每个测试都测试一件事。
一些测试框架(如N#for C#)允许您定义一个带参数的测试,然后定义值以重复测试。
e.g。
[TestCase(1, 1, 2)]
[TestCase(2, 3, 5)]
[TestCase(0, -1, -1)]
public void MyTest(int a, int b, int expected) {
Assert.AreEqual(expected, a + b);
}
如果你的框架支持它,那就非常容易了。
或者,如果您使用的是脚本语言(例如javascript),则可以在循环中定义测试,而不是断言。
e.g。
describe('My tests', function() {
var testCases = [
{a: 1, b: 1, expected: 2},
{a: 2, b: 3, expected: 5},
{a: 0, b: -1, expected: -1}
]
testCases.forEach(function(t) {
it(`Adds ${t.a} and ${t.b} correctly`, function() {
assert.equal(t.expected, t.a + t.b);
});
});
})
这定义了许多测试,测试单个事物。没有一个测试测试很多东西。这样可以更容易地看到哪一个失败了。