2017-01-27 5 views
4

나는 다음과 같은 오류가 점점 오전 : 내 Junit 시험에서이 코드 라인모호한 메서드 호출 어설 및 어설 매치에서 (더블 더블) assertEquals에서 두 assertEquals (Object, Object)를 사용하여 :

Both assertEquals(Object, Object) in Assert and assertEquals(double, double) in Assert match 

을, getScore()가 반환합니다 메모 double :

import static org.junit.Assert.*; 
:

assertEquals(2.5, person.getScore()); 

이 내 어설 가져 오기입니다

이 문제의 원인은 무엇이며 어떻게 해결할 수 있습니까?

답변

9

나는 당신의 getScore()을 두 번 반환을 추측, 두 번하지된다. 따라서 컴파일러는 혼란 스럽습니다. 두 인수를 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 

어쨌든 기본 유형 double을 반환하는 메소드를 설정합니다.

0

당신은 Assert.assertEquals(double, double) (원시 버전) 사용에 특별히 관심이 같은 편차를 0으로 허용 편차를 설정 할 수 있습니다 재정의 된 메서드 호출하려고하면 :

assertEquals(2.5, person.getScore(), 0.0); 

당신은 또한에 세 번째 매개 변수를 할 수 있습니다를 person.getScore()2.5과 약간 다를 수 있으면 0 이외의 값이됩니다. 2.500001이 허용 예를 들어, 다음 시험은

assertEquals(2.5, person.getScore(), 0.000001);