Certains tests ont bien fonctionné. Ensuite, je l'ai déplacé dans un paquet différent et je reçois maintenant des erreurs. Voici le code:
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"));
}
Le message d'erreur est le suivant:
La méthode assertEquals (Object, Object) est ambiguë pour le type JGraphtUtilitiesTest
Comment puis-je réparer cela? Pourquoi ce problème est-il survenu lorsque j'ai déplacé la classe vers un autre package?
La méthode assertEquals (Object, Object) est ambiguë pour le type ...
Cette erreur signifie que vous passez double
et et Double
à une méthode comportant deux signatures différentes: assertEquals(Object, Object)
et assertEquals(double, double)
qui pourraient être appelés, grâce à la recherche automatique.
Pour éviter toute ambiguïté, veillez à appeler assertEquals(Object, Object)
(en passant deux doubles) ou assertEquals(double, double)
(en passant deux doubles).
Donc, dans votre cas, vous devriez utiliser:
assertEquals(Double.valueOf(70), eccen.get("alpha"));
Ou:
assertEquals(70.0d, eccen.get("alpha").doubleValue());
Vous pouvez utiliser la méthode
assertEquals(double expected, double actual, double delta)
Ce qui prendra en compte les erreurs d’arrondi qui sont mineures en virgule flottante (voir cet article par exemple) Tu peux écrire
assertEquals(70, eccen.get("alpha"), 0.0001);
Cela signifie que tant que les deux valeurs diffèrent pour moins de 0,0001, elles sont considérées comme égales. Cela présente deux avantages:
La solution la plus simple à ce problème consiste à convertir le second paramètre en primitive:
assertEquals(70, (double)eccen.get("alpha"));
Ambiguïté supprimée.
Ceci est valable pour toutes les sous-classes Number, par exemple:
assertEquals(70, (int)new Integer(70));
Cela résoudrait aussi une ambiguïté.
Cependant, assertEquals (double, double) est obsolète dès maintenant et pour de bonnes raisons. Je vous encourage donc à utiliser la méthode avec un delta, comme d'autres l'ont déjà suggéré.
Par bonnes raisons, je veux dire que, étant donné la représentation interne des nombres doubles, deux nombres doubles apparemment égaux peuvent différer par une fraction infinitésimale non pertinente et ne réussiraient pas un test, mais cela ne signifie pas que votre code est défectueux.