In Java/Junit muss ich mit einem Objekt auf Null testen. Es gibt eine Vielzahl von Möglichkeiten, wie ich eine Bedingung testen kann, aber ich habe assertTrue für die meisten meiner Tests verwendet. Wenn ich in einem assertTrue nach Nullen suche, gibt EclEmma an, dass es nur einen Zweig testet.Fehlende Verzweigungen bei Verwendung von assertTrue anstelle von assertNull
Wenn ich die Anweisung manuell in eine Variable auflöse (z. B. das Ergebnis auf einen booleschen Wert setze und ihn in assertTrue übergebe), gilt die Codeabdeckung als abgeschlossen auf der Assert, aber nicht in der Variableninitialisierungszeile.
Warum passiert das? Bezieht sich dies auf den zusätzlichen Byte-Code, den Java scheinbar hinzufügt, wie unter http://sourceforge.net/apps/trac/eclemma/wiki/FilteringOptions erwähnt? Irgendwelche Lösungen (abgesehen von anderen assert-Anweisungen).
assertTrue:
assertTrue(myObject == null); //1 of 2 branches
assertTrue:
boolean test = (myObject == null); //1 of 2 branches missing
assertTrue(test); // complete
assertNull:
assertNull(myObject) //complete;
Was durch die Verwendung assertNull null falsch ist mit der Durchsetzung? Es ist normalerweise besser, den entsprechenden Assert-Typ für das Asserted-Objekt zu verwenden. Sie sehen besser, was falsch ist, wenn der Test fehlschlägt, ohne zu viel in den Testcode zu graben. – nansen
@nansen Das ist wahr, und ich habe kein Problem mit assertNull, wenn es eine Voraussetzung ist, aber IMO, alle behaupten "Typen" sind nur eine andere Form von assertTrue. Es kann zusätzliche Vorteile bei der Verwendung verschiedener Assert-Typen wie hinzugefügter Fehlerinformation/Lesbarkeit geben, aber das ist hier nicht wirklich ein Problem. –
@nansen Das ist nicht zu sagen, dass ich AssertNull nicht verwenden und wahrscheinlich verwenden wird, fand ich gerade dieses spezielle Problem interessant, wie ich im Grunde für die gleiche Sache testen, aber Emma gibt völlig andere Ergebnisse. –