Java JUnit: метод X неоднозначен для типа Y
У меня были некоторые тесты, работающие нормально. Затем я переместил его в другой пакет, и теперь я получаю ошибки. Вот код:
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
Как я могу это исправить? Почему эта проблема возникла, когда я переместил класс в другой пакет?
Ответы
Ответ 1
Метод assertEquals (Object, Object) неоднозначен для типа...
Эта ошибка означает, что вы передаете double
и и double
в метод, который имеет две разные подписи: assertEquals(Object, Object)
и assertEquals(double, double)
, которые могут быть вызваны, благодаря автобоксированию.
Чтобы избежать двусмысленности, убедитесь, что вы либо вызываете assertEquals(Object, Object)
(путем передачи двух парных разрядов), либо assertEquals(double, double)
(пропуская два удвоения).
Итак, в вашем случае вы должны использовать:
assertEquals(Double.valueOf(70), eccen.get("alpha"));
Или:
assertEquals(70.0d, eccen.get("alpha").doubleValue());
Ответ 2
Вы можете использовать метод
assertEquals(double expected, double actual, double delta)
Что будет учитывать погрешность округления, которая является малой для плавающей запятой (например, этот пост). Вы можете написать
assertEquals(70, eccen.get("alpha"), 0.0001);
Это означает, что пока два значения отличаются менее чем на 0,0001, они считаются равными. Это имеет два преимущества:
- Сравнивает значения с плавающей запятой, поскольку они должны
- Не нужно бросать, поскольку три аргумента утверждают только применительно к удвоениям, а не к общим объектам