是否可以对数字进行不必要的测试?

Is it possible to do unnecessary testing for numbers?

提问人:pizzae 提问时间:3/4/2018 更新时间:3/25/2018 访问量:31

问:

例如,如果我想测试这个数字,我可以写一个测试来测试它确实等于 。那么是否有必要添加其他测试,例如 和 ?或者,检查这一事实是否意味着其他测试也是正确的?x = 5x5x != 4x != 6x = 5

单元测试 与语言无关

评论

0赞 Reblochon Masque 3/4/2018
您能描述一下测试是在什么情况下进行的吗?
0赞 pizzae 3/4/2018
一个简单的单元测试。例如:如果我的起始值为 100,并调用“foo”,它减去 100 中的数字。因此,如果我调用 foo(20),我应该期望结果为 80。我是否有必要测试 foo(20) 的结果不等于 79 和 81?
1赞 Reblochon Masque 3/4/2018
不,没有必要!

答:

0赞 Frank Puffer 3/7/2018 #1

如果变量完全表示数字,则无需针对不同的值进行测试。除了显而易见之外,这还源于标准数学中假设的等式运算符的传递性。x

但是,许多小数(如 0.1)不能用标准二进制编码精确表示。在这种情况下,您必须接受某个错误,因此不应进行测试,因为即使两个值在所需的容差范围内相等,也可能如此。相反,您应该测试 where 是否是接受的错误。x == 0.1falsex <= 0.1 + e AND x >= 0.1 - ee

顺便说一句,我用了不等式运算符代替,因为在 C 和相关语言中,无论原始值是多少,都是 :)。===x = 5x

0赞 Olivier Melançon 3/25/2018 #2

这完全取决于上下文和范式。

例如,在面向对象的编程语言中,您可以定义类型/类的相等性,这有时意味着相等性不再是可传递的。两者都可能是真的。最糟糕的情况甚至可能是这样,但事实并非如此。x == 5x == 6x == 6x6