gpt4 book ai didi

testing - 您应该在循环内执行断言语句吗?

转载 作者:行者123 更新时间:2023-11-28 19:57:52 24 4
gpt4 key购买 nike

当我们有多个值要测试给定方法时,我们是否应该在单个测试中循环遍历这些值?

或者它是不正确的,因为在失败的情况下可能更难确定原因?

像这样:

testSomething(){
List myValues = {'value1', 'value2', 'value3', ...}

for(value: myValues){
assertTrue(Something(Value))
}
}

最佳答案

如果你能避免的话就不会

我的意思是,根据您使用什么进行单元测试,您可能无法切实避免它。既然如此,那就按需做吧

如果你在一个循环中运行你的断言,你实际上有一个测试任意数量的东西。这会让人感到困惑。

你想要的是多个测试,每个测试一个东西。

一些测试框架(如 C# 的 NUnit)允许您定义一个采用参数的测试,然后定义用于重复测试的值。

例如

[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),您可以在循环中定义测试,而不是断言。

例如

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);
});
});
})

这定义了许多测试,测试单个事物。没有一个测试可以测试很多东西。这随后使得在失败时更容易看出哪个失败了。

关于testing - 您应该在循环内执行断言语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41832594/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com