Ist es in JUnit möglich zu behaupten, dass ein Objekt eine Instanz einer Klasse ist? Aus verschiedenen Gründen habe ich ein Objekt in meinem Test, dessen Typ ich überprüfen möchte. Ist es ein Typ von Objekt1 oder ein Typ von Objekt2?
Derzeit habe ich:
assertTrue(myObject instanceof Object1);
assertTrue(myObject instanceof Object2);
Das funktioniert, aber ich habe mich gefragt, ob es einen ausdrucksstärkeren Weg gibt, dies zu tun.
Zum Beispiel so etwas wie:
assertObjectIsClass(myObject, Object1);
Ich könnte das tun:
assertEquals(myObject.class, Object1.getClass());
Gibt es eine bestimmte Assert-Methode, mit der ich einen Objekttyp eleganter und flüssiger testen kann?
java
unit-testing
junit
RNJ
quelle
quelle
assertTrue(myObject instanceof Object1);
undassertEquals(myObject.class, Object1.getClass());
sind eigentlich verschiedene Tests? Der erste akzeptiert, dass myObject eine Instanz einer Unterklasse von istObject1
, der spätere nicht.assertTrue
.assertTrue
würde nur sagenexpected true got false
, Hamcrest würde sagenexpected instanced of XYZ, got instance of ABC
Antworten:
Sie können die
assertThat
mit JUnit gelieferte Methode und die Matcher verwenden.Schauen Sie sich diesen Link an , der ein wenig über die JUnit Matchers beschreibt.
Beispiel:
Prüfung:
quelle
instanceof
: durchgehenBaseClass subClass = new SubClass(); assertThat(subClass, isA(SubClass.class));
, aber sie wird nicht kompiliert, weil dies nicht der FallSubClass
ist? super BaseClass
.instanceOf(BaseClass.class)
,instanceOf(String.class)
und Sie werden sehen, dass es gut kompiliert wird, aber es wird ein AssertionError ausgelöst.Class<T>
anstattClass<?>
(was instanceOf tut). Da es die Klasse erfasst, wäre es ein Fehler bei der Kompilierung, isA mit einer Klasse auszuführen, die mit der Instanz nicht kompatibel ist. github.com/hamcrest/JavaHamcrest/issues/39Da
assertThat
die alte Antwort jetzt veraltet ist, poste ich die richtige Lösung:assertTrue(objectUnderTest instanceof TargetObject);
quelle
true
richtig? Und ich denke, Sie möchten den tatsächlichen Typ testen.Lösung für JUnit 5
Die Dokumentation sagt:
Beispiel für Hamcrest :
Beispiel für AssertJ :
Beachten Sie, dass dies voraussetzt, dass Sie ähnliche Verhaltensweisen testen möchten
instanceof
(die Unterklassen akzeptieren). Wenn Sie einen exakt gleichen Typ wünschen, sehe ich keinen besseren Weg, als zu behaupten, dass die beiden Klassen gleich sind, wie Sie in der Frage erwähnt haben.quelle
assertThat()
auf Hamcrest verschoben, sodass JUnit auch mit Assertion-Bibliotheken von Drittanbietern zusammenarbeitet.instanceOf
wieinstanceof
(den Fall dagegen).instanceOf
ist eine Funktion, währendinstanceof
es sich um ein Java-Schlüsselwort handelt .Lösung für JUnit 5 für Kotlin!
Beispiel für Hamcrest :
Beispiel für AssertJ :
quelle