I had some tests working fine. Then, I moved it to a different package, and am now getting errors. Here is the 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"));
}
The error message is this:
The method assertEquals(Object, Object) is ambiguous for the type JGraphtUtilitiesTest
How can I fix this? Why did this problem occur as I moved the class to a different package?
The simplest solution to this problem is just cast the second parameter into a primitive:
Ambiguity removed.
This is valid for any of the Number subclasses, for example:
Would solve an ambiguity too.
However, assertEquals(double, double) is deprecated as of now and for good reasons, so I encourage you to use the method with a delta as others have suggested already.
By good reasons I mean that, given the inner representation of double numbers, two apparently equal double numbers can differ in an irrelevant infinitesimal fraction and wouldn't pass a test, but that doesn't mean that there's anything wrong with your code.
You can use the method
Which will take into account rounding error that are hinerent to floating point (see this post for example). You can write
This mean that as long as the two values differ for less than 0.0001 they are considered to be equals. This has two advantages:
The method assertEquals(Object, Object) is ambiguous for the type ...
What this error means is that you're passing a
double
and andDouble
into a method that has two different signatures:assertEquals(Object, Object)
andassertEquals(double, double)
both of which could be called, thanks to autoboxing.To avoid the ambiguity, make sure that you either call
assertEquals(Object, Object)
(by passing two Doubles) orassertEquals(double, double)
(by passing two doubles).So, in your case, you should use:
Or: