몇 가지 테스트가 잘 작동했습니다. 그런 다음 다른 패키지로 옮겼는데 이제 오류가 발생합니다. 다음은 코드입니다.
import static org.junit.Assert.*;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.jgrapht.Graphs;
import org.jgrapht.WeightedGraph;
import org.jgrapht.graph.DefaultWeightedEdge;
import org.jgrapht.graph.SimpleWeightedGraph;
import org.junit.*;
@Test
public void testEccentricity() {
WeightedGraph<String, DefaultWeightedEdge> g = generateSimpleCaseGraph();
Map<String, Double> eccen = JGraphtUtilities.eccentricities(g);
assertEquals(70, eccen.get("alpha"));
assertEquals(80, eccen.get("l"));
assertEquals(130, eccen.get("l-0"));
assertEquals(100, eccen.get("l-1"));
assertEquals(90, eccen.get("r"));
assertEquals(120, eccen.get("r-0"));
assertEquals(130, eccen.get("r-1"));
}
오류 메시지는 다음과 같습니다.
assertEquals (Object, Object) 메소드는 JGraphtUtilitiesTest 유형에 대해 모호합니다.
이 문제를 어떻게 해결할 수 있습니까? 클래스를 다른 패키지로 이동할 때이 문제가 발생하는 이유는 무엇입니까?
답변
assertEquals (Object, Object) 메소드는 … 유형에 대해 모호합니다.
어떤이 오류가 의미하는 것은 당신이 전달하는 것입니다 double
및과 Double
: 두 개의 서로 다른 서명을이 방법으로 assertEquals(Object, Object)
하고 assertEquals(double, double)
모두, 오토 박싱 덕분이라고 할 수있다.
모호함을 피하기 위해 assertEquals(Object, Object)
(두 번의 복식 통과) 또는 assertEquals(double, double)
( 두 번의 복식 통과) 를 호출해야합니다 .
따라서 귀하의 경우에는 다음을 사용해야합니다.
assertEquals(Double.valueOf(70), eccen.get("alpha"));
또는:
assertEquals(70.0d, eccen.get("alpha").doubleValue());
답변
방법을 사용할 수 있습니다
assertEquals(double expected, double actual, double delta)
부동 소수점에 대한 반올림 오류를 고려합니다 ( 예를 들어이 게시물 참조 ). 당신은 쓸 수 있습니다
assertEquals(70, eccen.get("alpha"), 0.0001);
이는 두 값이 0.0001 미만으로 다른 한 동일한 것으로 간주됨을 의미합니다. 여기에는 두 가지 장점이 있습니다.
- 예상대로 부동 소수점 값을 비교합니다.
- 세 가지 인수 주장은 일반 객체가 아닌 복식에만 적용되므로 캐스팅 할 필요가 없습니다.
답변
이 문제에 대한 가장 간단한 해결책은 두 번째 매개 변수를 기본으로 캐스트하는 것입니다.
assertEquals(70, (double)eccen.get("alpha"));
모호성이 제거되었습니다.
다음과 같이 Number 하위 클래스에 유효합니다.
assertEquals(70, (int)new Integer(70));
모호함도 해결할 것입니다.
그러나 assertEquals (double, double)는 현재와 정당한 이유로 더 이상 사용되지 않으므로 다른 사람들이 이미 제안한대로 델타와 함께 메서드를 사용하는 것이 좋습니다.
타당한 이유는 이중 숫자의 내부 표현을 고려할 때 두 개의 동일한 이중 숫자가 관련이없는 극소 분수에서 다를 수 있으며 테스트를 통과하지 못할 수 있지만 이것이 코드에 문제가 있다는 것을 의미하지는 않습니다.