IMO das ist nett genug, vorgeschlagene Optionen sind weniger lesbar
The Godfather
3
@ TheGodfather ist weniger lesbar, führt aber zu aussagekräftigeren Assertionsfehlern (dh die akzeptierte Antwort zeigt den Unterschied in den Zeichenfolgen, wobei die OPs-Lösung bei einem Fehler nur "Falsch, wenn erwartet, wahr" anzeigt)
Mike
Was eine Behauptung "schöner" macht, ist die Fehlermeldung, wenn sie fehlschlägt. Wie lesbar es im Code ist, ist zweitrangig, da Sie den Code erst betrachten müssen, wenn er fehlschlägt, und die Fehlermeldung als erstes angezeigt wird.
rjmunro
Antworten:
289
Wenn Sie Hamcrest und JUnit4 hinzufügen, können Sie Folgendes tun:
String x ="foo bar";Assert.assertThat(x,CoreMatchers.containsString("foo"));
Bei einigen statischen Importen sieht es viel besser aus:
Stellen Sie sicher, dass Sie org.junit.AssertVersus verwenden junit.framework.Assert, da letzterer nicht über den Hamcrest MatcherassertThat()
Visionary Software Solutions verfügt.
15
Ich denke, wenn JUnit 4.10 ausgeführt wird, ist die zu verwendende Klasse org.junit.matchers.JUnitMatchers, zB: assertThat ("etwas", JUnitMatchers.containsString ("some"));
Ewen Cartwright
1
Die Fehlermeldung für einen Fehler assertThatist viel hilfreicher als einassertTrue
Mike Rylander
3
Statische Importe erforderlich sind import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- nur um jemanden vor Ärger zu bewahren
Eis
4
... und org.hamcrest.Matchers.containsString;in der neuesten API, in der hamcrest-libraryAbhängigkeit.
Eis
12
benutze fest assert 2.0 wann immer möglich EDIT: assertj kann mehr Assertions haben (eine Gabelung)
Ich habe mit AssertJ.assertThat keine Includes-Methode gefunden. Dies ist, was ich stattdessen gefunden habe - org.assertj.core.api.Assertions.assertThat (convertException) .hasMessageContaining ("einige Teilzeichenfolgen");
Raj
Entschuldigung, ich denke, mein obiger Kommentar passt nicht zum Kontext dieser Antwort. Ich befand mich in einem anderen Anwendungsfall, in dem ich in einer Ausnahmemeldung nach einem Teilstring suchen muss.
Raj
8
Verwenden Sie Hamcrest Matcher containsString()
// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError:Expected: a string containing "myName"
got:"some other name"
Sie können optional eine noch detailliertere Fehlermeldung hinzufügen.
// Hamcrest assertion with custom error message
assertThat("my error message", person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError: my error message
Expected: a string containing "myName"
got:"some other name"
Habe hier meine Antwort auf eine doppelte Frage gepostet
importstatic org.assertj.core.api.Assertions.assertThat;import org.junit.Test;publicclassTestStr{@Testpublicvoid testThatStringIsContained(){String testStr ="hi,i am a test string";
assertThat(testStr).contains("test");}}
Antworten:
Wenn Sie Hamcrest und JUnit4 hinzufügen, können Sie Folgendes tun:
Bei einigen statischen Importen sieht es viel besser aus:
Die erforderlichen statischen Importe wären:
quelle
org.junit.Assert
Versus verwendenjunit.framework.Assert
, da letzterer nicht über den Hamcrest MatcherassertThat()
assertThat
ist viel hilfreicher als einassertTrue
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;
- nur um jemanden vor Ärger zu bewahrenorg.hamcrest.Matchers.containsString;
in der neuesten API, in derhamcrest-library
Abhängigkeit.benutze fest assert 2.0 wann immer möglich EDIT: assertj kann mehr Assertions haben (eine Gabelung)
quelle
Verwenden Sie Hamcrest Matcher
containsString()
Sie können optional eine noch detailliertere Fehlermeldung hinzufügen.
Habe hier meine Antwort auf eine doppelte Frage gepostet
quelle
Verwenden Sie die neue
assertThat
Syntax zusammen mit Hamcrest .Es ist ab JUnit 4.4 verfügbar .
quelle
Es ist zu spät, aber nur um es zu aktualisieren, habe ich es mit der folgenden Syntax erledigt
quelle
Eine andere Variante ist
Außerdem in
org.mockito.internal.matchers
es gibt einige andere interessante Matcher, wieStartWith
,Contains
usw.quelle
assertj Variante
quelle
Beispiel (Junit-Version 4.13)
quelle
Ich habe auf dieser Seite viele Antworten ausprobiert, keine hat wirklich funktioniert:
Anstatt lesbaren Code zu schreiben, habe ich mich stattdessen für den in der Frage erwähnten einfachen und praktikablen Ansatz entschieden.
Hoffentlich kommt eine andere Lösung.
quelle