문제

나는 약간의 테스트가 잘 작동했습니다. 그런 다음 다른 패키지로 옮겼으며 이제 오류가 발생하고 있습니다. 코드는 다음과 같습니다.

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"));

모호성이 제거되었습니다.

예를 들어 숫자 서브 클래스에 유효합니다.

assertEquals(70, (int)new Integer(70));

모호성도 해결할 것입니다.

그러나 Assertequals (Double, Double)는 현재와 적절한 이유가 있으므로 다른 사람들이 이미 제안한 것처럼 델타와 함께 방법을 사용하는 것이 좋습니다.

정당한 이유는 이중 숫자의 내부 표현을 고려할 때, 두 개의 명백한 이중 숫자가 관련없는 무한한 분수에서 다를 수 있으며 테스트를 통과하지 못하지만 코드에 문제가 있다는 것을 의미하지는 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top