Tenía algunas pruebas funcionando bien. Luego, lo moví a un paquete diferente y ahora recibo errores. Aquí está el 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"));
}
El mensaje de error es este:
El método assertEquals (Object, Object) es ambiguo para el tipo JGraphtUtilitiesTest
¿Cómo puedo arreglar esto? ¿Por qué ocurrió este problema cuando moví la clase a un paquete diferente?
Respuestas:
El método assertEquals (Object, Object) es ambiguo para el tipo ...
Lo que este error significa es que está pasando un
double
y yDouble
en un método que tiene dos firmas diferentes:assertEquals(Object, Object)
yassertEquals(double, double)
ambas podrían llamarse, gracias al autoboxing.Para evitar la ambigüedad, asegúrese de igualar
assertEquals(Object, Object)
(pasando dos dobles) oassertEquals(double, double)
(pasando dos dobles).Entonces, en su caso, debe usar:
O:
fuente
assertEquals(Object, Object)
yassertEquals(double, double)
cuál es el caso de JUnit 4.4, 4.5. Pero como dije, cambiar la versión de JUnit no es la solución real, solo arregla el problema.Puedes usar el método
Lo cual tendrá en cuenta los errores de redondeo que son distintos al punto flotante (consulte esta publicación, por ejemplo). Puedes escribir
Esto significa que siempre que los dos valores difieran en menos de 0,0001, se considerarán iguales. Esto tiene dos ventajas:
fuente
La solución más simple a este problema es simplemente convertir el segundo parámetro en una primitiva:
Se eliminó la ambigüedad.
Esto es válido para cualquiera de las subclases de Number, por ejemplo:
También resolvería una ambigüedad.
Sin embargo, assertEquals (doble, doble) está obsoleto a partir de ahora y por buenas razones, así que le animo a que utilice el método con un delta como ya han sugerido otros.
Por buenas razones quiero decir que, dada la representación interna de números dobles, dos números dobles aparentemente iguales pueden diferir en una fracción infinitesimal irrelevante y no pasarían una prueba, pero eso no significa que haya algo malo en su código.
fuente