OMI, c'est assez sympa, les options suggérées sont moins lisibles
The Godfather
3
@TheGodfather moins lisible, mais produit des erreurs d'assertion plus significatives (c'est-à-dire que la réponse acceptée montrera la différence dans les chaînes, alors que la solution OPs affichera simplement "False when expected True" en cas d'échec)
Mike
Ce qui rend une affirmation "plus agréable", c'est le message d'erreur en cas d'échec. La lisibilité du code est secondaire à cela, car vous n'avez pas à regarder le code jusqu'à ce qu'il échoue, et le message d'échec est la première chose que vous voyez.
rjmunro
Réponses:
291
Si vous ajoutez Hamcrest et JUnit4, vous pouvez faire:
String x ="foo bar";Assert.assertThat(x,CoreMatchers.containsString("foo"));
Avec quelques importations statiques, cela a l'air beaucoup mieux:
Assurez-vous que vous utilisez org.junit.Assertversus junit.framework.Assert, car ce dernier n'a pas le Hamcrest MatcherassertThat()
Visionary Software Solutions
15
Je pense que lors de l'exécution de JUnit 4.10, la classe à utiliser est org.junit.matchers.JUnitMatchers, par exemple: assertThat ("quelque chose", JUnitMatchers.containsString ("certains"));
Ewen Cartwright
1
Le message d'échec pour un échec assertThatest bien plus utile qu'unassertTrue
Mike Rylander
3
les importations statiques nécessaires sont import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- juste pour sauver quelqu'un de la difficulté
eis
4
... et org.hamcrest.Matchers.containsString;dans la dernière api, dans la hamcrest-librarydépendance.
eis
13
utilisez fest assert 2.0 autant que possible EDIT: assertj peut avoir plus d'assertions (un fork)
Je n'ai pas trouvé de méthode contient avec AssertJ.assertThat. C'est ce que j'ai trouvé à la place - org.assertj.core.api.Assertions.assertThat (conversionException) .hasMessageContaining ("some substring");
Raj
désolé, je pense que mon commentaire ci-dessus ne convient pas au contexte de cette réponse. J'étais sur un cas d'utilisation différent où je dois vérifier une sous-chaîne dans un message d'exception.
Raj
8
Utilisez Hamcrest Matcher containsString()
// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError:Expected: a string containing "myName"
got:"some other name"
Vous pouvez facultativement ajouter un message d'erreur encore plus détaillé.
// Hamcrest assertion with custom error message
assertThat("my error message", person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError: my error messageExpected: a string containing "myName"
got:"some other name"
J'ai publié ma réponse à une question en double ici
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");}}
Réponses:
Si vous ajoutez Hamcrest et JUnit4, vous pouvez faire:
Avec quelques importations statiques, cela a l'air beaucoup mieux:
Les importations statiques nécessaires seraient:
la source
org.junit.Assert
versusjunit.framework.Assert
, car ce dernier n'a pas le Hamcrest MatcherassertThat()
assertThat
est bien plus utile qu'unassertTrue
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;
- juste pour sauver quelqu'un de la difficultéorg.hamcrest.Matchers.containsString;
dans la dernière api, dans lahamcrest-library
dépendance.utilisez fest assert 2.0 autant que possible EDIT: assertj peut avoir plus d'assertions (un fork)
la source
Utilisez Hamcrest Matcher
containsString()
Vous pouvez facultativement ajouter un message d'erreur encore plus détaillé.
J'ai publié ma réponse à une question en double ici
la source
Utilisez la nouvelle
assertThat
syntaxe avec Hamcrest .Il est disponible à partir de JUnit 4.4 .
la source
Il est trop tard, mais juste pour mettre à jour, je l'ai fait avec la syntaxe ci-dessous
la source
Une autre variante est
De plus,
org.mockito.internal.matchers
il y a d'autres matchers intéressants, commeStartWith
,Contains
etc.la source
variante assertj
la source
Exemple (version junit - 4.13)
la source
J'ai essayé de nombreuses réponses sur cette page, aucune n'a vraiment fonctionné:
Donc, au lieu d'écrire du code lisible, j'ai décidé d'utiliser plutôt l'approche simple et réalisable mentionnée dans la question.
Espérons qu'une autre solution se présentera.
la source