Eu tive alguns testes funcionando bem. Em seguida, mudei para um pacote diferente e agora estou recebendo erros. Aqui está o código:
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"));
}
A mensagem de erro é esta:
O método assertEquals (Object, Object) é ambíguo para o tipo JGraphtUtilitiesTest
Como posso consertar isso? Por que esse problema ocorreu quando mudei a classe para um pacote diferente?
Respostas:
O método assertEquals (Object, Object) é ambíguo para o tipo ...
O que esse erro significa é que você está passando um
double
e eDouble
para um método que possui duas assinaturas diferentes:assertEquals(Object, Object)
eassertEquals(double, double)
ambas podem ser chamadas, graças ao autoboxing.Para evitar a ambigüidade, certifique-se de chamar
assertEquals(Object, Object)
(passando duas duplas) ouassertEquals(double, double)
(passando duas duplas).Portanto, no seu caso, você deve usar:
Ou:
fonte
assertEquals(Object, Object)
eassertEquals(double, double)
que é o caso do JUnit 4.4, 4.5. Mas como eu disse, mudar a versão do JUnit não é a solução real, apenas conserte o problema.Você pode usar o método
O que levará em conta os erros de arredondamento que são hinerentes ao ponto flutuante (veja este post por exemplo). Você pode escrever
Isso significa que, desde que os dois valores sejam diferentes por menos de 0,0001, eles são considerados iguais. Isso tem duas vantagens:
fonte
A solução mais simples para esse problema é apenas converter o segundo parâmetro em uma primitiva:
Ambiguidade removida.
Isso é válido para qualquer uma das subclasses de Number, por exemplo:
Também resolveria uma ambigüidade.
No entanto, assertEquals (double, double) está obsoleto a partir de agora e por boas razões, então eu encorajo você a usar o método com um delta como outros já sugeriram.
Por boas razões, quero dizer que, dada a representação interna dos números duplos, dois números duplos aparentemente iguais podem diferir em uma fração infinitesimal irrelevante e não passariam no teste, mas isso não significa que há algo errado com seu código.
fonte