JUnit: The method assertEquals(Object, Object) is ambiguous

DarthShader

Erfahrenes Mitglied
Hallo zusammen,

ich habe eine kurze praktische Frage zu JUnit (Version 4.8.2):

Ich möchte die Rückgabe einer Methode, die vom Typ "Integer" ist, auf einen bestmmten Wert prüfen. Dies tue ich zur Zeit so:

Java:
assertEquals( new Integer( 123 ), converter.convert( "123" ) );

Das "new Integer( 123 )" ist störend, ich möchte eigentlich das hier schreiben:

Java:
assertEquals( 123, converter.convert( "123" ) );

Aber da sagt mir der Compiler folgendes:

Java:
The method assertEquals(Object, Object) is ambiguous for the type ConverterTest

Ich importiere in der Klasse oben lediglich

Java:
import static org.junit.Assert.assertEquals;

Ich hab das Gefühl, dass da noch Überladungen von Methoden existieren, die genau den Fehler erzeugen, bzw. die "Unzulänglichkeit", dass man nicht direkt 123 verwenden kann.


Hat jemand nen praktischen Typ, wie macht Ihr sowas?


Danke!
 
Hi,

meine Vermutung ist, dass der Compiler dort keine Entscheidung treffen kann aufgrund von Autoboxing und Widening.

Im ersten Beispiel wird assertEquals(Object, Object) verwendet. Das ist eindeutig.

Beim zweiten Beispiel gibt es 2 Möglcihkeiten:

1. Der erste int Parameter implizit zu einem Integer. Damit matcht wieder assertEquals(Object, Object)
2. Der zweite Parameter wird zu einem int, dann matcht assertEquals(int, int)

Du könntest den Aufruf auch so machen:

assertEquals(123, converter.convert("123").intValue())

Vielleicht ist es auch Blödsinn, was ich erzähle :-)

Gruß
twagi
 
Deine Erklärung dazu ist richtig twagi, einerseits kann assertEquals (int, int) und einmal assertEquals Object, Object) richtig sein. Deshalbb meckert er darum.

Du hast zwei möglichkeiten dies abzubilden einmal:

assertEquals(123, converter.convert("123").intValue())

aber die weitaus schönere Variante:

assertEquals( Integer.valueOf( 123 ), converter.convert( "123" ) );

Benutze lieber statt ein new immer .valueOf wenn es möglich ist. So ersparst du dir die teure erzeugung eines neuen Objekts.
 
Und wenn du es häufig brauchst, schreibst du einfach deine eigene assertEquals(int, Integer) die dann entsprechend an die andere assertEquals aus JUnit delegiert.
 
Hallo zusammen,

sorry für meine späte Antwort - wollte mich nur kurz für Eure Beiträge bedanken, das hat mir sehr geholfen.

Danke!
 
Zurück