Jam*_*mas 11 java junit unit-testing
我有一个junit测试断言两个Double对象具有以下内容:
Assert.assertEquals(Double expected, Double result);
Run Code Online (Sandbox Code Playgroud)
这很好,然后我决定改变它以使用原始的双倍,结果被弃用,除非你也提供了一个delta.
所以我想知道在这个assertEquals中使用Double对象或原始类型有什么区别?为什么在没有delta确定的情况下使用对象,但是不推荐使用没有delta的基元?Java是否在后台执行某些已考虑默认delta值的内容?
谢谢.
Pét*_*rök 17
没有使用JUnit断言方法与签名
assertEquals(Double expected, Double result);
Run Code Online (Sandbox Code Playgroud)
但是,对象有一个通用的:
assertEquals(Object expected, Object result);
Run Code Online (Sandbox Code Playgroud)
这会调用对象的equals方法,正如您所料,不建议将其用于比较Double对象.
对于双精度数,正如您所观察到的,绝对有必要使用delta进行比较,以避免浮点舍入问题(在其他一些答案中已有解释).如果使用assertEquals带double参数的3参数版本
assertEquals(double expected, double actual, double delta);
Run Code Online (Sandbox Code Playgroud)
你的Doubles将被静默地取消装箱double,一切都会正常工作(你的测试不会意外地失败:-).
最好这样写:
assertEquals(23.0, 250.0, 0.0)
Run Code Online (Sandbox Code Playgroud)
0.0 - 它是增量。阅读为什么不推荐使用您的方法。