Saya memiliki beberapa tes yang bekerja dengan baik. Kemudian, saya memindahkannya ke paket lain, dan sekarang saya mendapatkan kesalahan. Ini kodenya:
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"));
}
Pesan kesalahannya adalah ini:
Metode assertEquals (Object, Object) ambigu untuk tipe JGraphtUtilitiesTest
Bagaimana cara memperbaikinya? Mengapa masalah ini terjadi saat saya memindahkan kelas ke paket yang berbeda?
Jawaban:
Metode assertEquals (Object, Object) ambigu untuk tipe ...
Arti kesalahan ini adalah Anda meneruskan
double
dan danDouble
ke dalam metode yang memiliki dua tanda tangan berbeda:assertEquals(Object, Object)
danassertEquals(double, double)
keduanya dapat dipanggil, berkat autoboxing.Untuk menghindari ambiguitas, pastikan Anda memanggil
assertEquals(Object, Object)
(dengan mengoper dua Ganda) atauassertEquals(double, double)
(dengan mengoper dua Ganda ).Jadi, dalam kasus Anda, Anda harus menggunakan:
Atau:
sumber
assertEquals(Object, Object)
danassertEquals(double, double)
yang merupakan kasus JUnit 4.4, 4.5. Tetapi seperti yang saya katakan, mengubah versi JUnit bukanlah solusi nyata, perbaiki masalahnya.Anda bisa menggunakan metode ini
Yang akan memperhitungkan kesalahan pembulatan yang mengarah ke floating point (lihat posting ini misalnya). Kamu bisa menulis
Ini berarti bahwa selama kedua nilai tersebut berbeda kurang dari 0,0001 maka keduanya dianggap sama. Ini memiliki dua keuntungan:
sumber
Solusi paling sederhana untuk masalah ini adalah dengan mengubah parameter kedua menjadi primitif:
Ambiguitas dihapus.
Ini berlaku untuk salah satu subkelas Number, misalnya:
Akan memecahkan ambiguitas juga.
Namun, assertEquals (double, double) tidak digunakan lagi sekarang dan untuk alasan yang baik, jadi saya mendorong Anda untuk menggunakan metode dengan delta seperti yang disarankan orang lain.
Maksud saya, dengan alasan yang baik, mengingat representasi bagian dalam dari angka ganda, dua angka ganda yang tampaknya sama dapat berbeda dalam pecahan sangat kecil yang tidak relevan dan tidak akan lulus ujian, tetapi itu tidak berarti ada yang salah dengan kode Anda.
sumber