У меня были некоторые тесты, работающие нормально. Затем я переместил его в другой пакет и теперь получаю ошибки. Вот код:
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(Object, Object)
и другое,assertEquals(double, double)
как в случае JUnit 4.4, 4.5. Но, как я уже сказал, изменение версии JUnit - не настоящее решение, просто устраните проблему.Вы можете использовать метод
Что будет учитывать ошибку округления, которая связана с плавающей запятой (см., Например, этот пост ). Ты можешь написать
Это означает, что до тех пор, пока два значения различаются менее чем на 0,0001, они считаются равными. У этого есть два преимущества:
источник
Самое простое решение этой проблемы - просто преобразовать второй параметр в примитив:
Устранена двусмысленность.
Это справедливо для любого из подклассов Number, например:
Решил бы тоже двусмысленность.
Однако assertEquals (double, double) на данный момент устарел и по уважительным причинам, поэтому я рекомендую вам использовать метод с дельтой, как уже предлагали другие.
По уважительным причинам я имею в виду, что, учитывая внутреннее представление чисел типа double, два явно равных числа типа double могут отличаться несущественной бесконечно малой дробью и не будут проходить проверку, но это не означает, что с вашим кодом что-то не так.
источник