Junit-assert-ODER Zustand in meinem test-Fall
In meinem test-Fall, ich bekomme einen integer-Wert:
int val = getXXX();
Dann, würde ich mag, um zu überprüfen, ob val
entweder gleich 3 oder gleich 5, das ist OK in jedem Fall. Also, ich habe:
assertTrue(val == 3 || val==5);
Habe ich ein test, der log zeigt val
ist 5, aber meine obige Behauptung-code konnte nicht mit AssertionFailedError. Scheint, ich kann nicht verwenden assertTrue(...)
auf diese Weise, dann, wie zu überprüfen, wahr für ODER-Bedingung?
- Debug-test und prüfen Sie den Wert von
val
Recht vor, dieassertTrue
- Anweisung. Ist es immer noch 5?
Du musst angemeldet sein, um einen Kommentar abzugeben.
ive versucht, zu schreiben, quick-test:
sein vergehen immer so dass ich denke, es ist etwas dazwischen-code, wenn Ihr Wert geändert wird.
Sie können
überprüfen Wert - diese Behauptung wird drucken Sie nette info was falsch, zum Beispiel:
Können Sie Hamcrest Matcher um eine klarere Fehlermeldung hier:
Wird dies deutlicher erklären:
zeigt genau die Erwartung und der falsche Wert, der geliefert wurde.
Matchers
Klasse in der Hamcrest-Bibliothek, die Sie verwenden könnenorg.hamcrest.CoreMatchers
statt. Das Beispiel aus der Antwort ist als in dieser form:assertThat(i, CoreMatchers.either(CoreMatchers.is(3)).or(CoreMatchers.is(5))
Während Harmcrest Matcher können den job tun, diese Konstanten können leicht umgestaltet werden, um mehr meaninful konstant, wie eine Liste der gültigen Werte. Dann können Sie die
contains
Methode, um zu überprüfen, dass der Wert in der Liste vorhanden ist - IMO ist auch einfacher zu Lesen ist:Foo.VALID_VALUES.contains(i)
ist weniger deutlich als der Ansatz mit Harmcrest Matcher. Harmcrest bietet auch ein matcher mit enthält, die auch viel besser als dieses.In meinem Fall wollte ich einige komplexe assertion-Logik, also habe ich einfach implementiert eine Methode, die einen booleschen Wert zurückgibt und es hat die Aufgabe, die Art und Weise es umgesetzt würde in diesem Beispiel wie folgt:
Dann die Behauptung:
Natürlich kann die Methode enthalten, die eine komplexere Logik, wenn nötig