jav*_*999 22 java double junit assert object
我收到以下错误:
Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match
Run Code Online (Sandbox Code Playgroud)
对于我的Junit
测试中的这行代码,请注意getScore
()返回一个double
:
assertEquals(2.5, person.getScore());
Run Code Online (Sandbox Code Playgroud)
这是我的断言导入:
import static org.junit.Assert.*;
Run Code Online (Sandbox Code Playgroud)
造成这种情况的原因是什么?如何解决这个问题?
小智 29
我猜你的getScore()会返回Double,而不是double.因此编译器很困惑:他应该将两个参数都转换为Object,还是应该只将Double转换为double?
double a = 2.0;
Double b = 2.0;
// assertEquals(a,b); // fails to compile
// the compiler is confused whether to use
assertEquals((Object) a,(Object) b); // OK
// or
assertEquals(a,(double) b); // OK
Run Code Online (Sandbox Code Playgroud)
无论如何,我会设置方法返回原始类型double.
如果您对使用Assert.assertEquals(double, double)
(原始版本)特别感兴趣,请尝试调用允许偏差并将允许偏差设置为零的覆盖方法,如下所示:
assertEquals(2.5, person.getScore(), 0.0);
Run Code Online (Sandbox Code Playgroud)
如果person.getScore()
允许与2.5
. 例如,如果2.500001
可以接受,那么您的测试将变为
assertEquals(2.5, person.getScore(), 0.000001);
Run Code Online (Sandbox Code Playgroud)