En mi opinión, esto es bastante agradable, las opciones sugeridas son menos legibles
The Godfather
3
@TheGodfather es menos legible, pero produce errores de afirmación más significativos (es decir, la respuesta aceptada mostrará la diferencia en cadenas, mientras que la solución de OP solo mostrará "Falso cuando se espera Verdadero" en caso de falla)
Mike
Lo que hace que una afirmación sea "más agradable" es el mensaje de error cuando falla. Lo legible que es en el código es secundario a eso, porque no tiene que mirar el código hasta que falla, y el mensaje de falla es lo primero que ve.
rjmunro
Respuestas:
291
Si agrega Hamcrest y JUnit4, podría hacer:
String x ="foo bar";Assert.assertThat(x,CoreMatchers.containsString("foo"));
Con algunas importaciones estáticas, se ve mucho mejor:
Asegúrese de usar org.junit.Assertversus junit.framework.Assert, ya que este último no tiene el Hamcrest MatcherassertThat()
Visionary Software Solutions
15
Creo que cuando se ejecuta JUnit 4.10, la clase a usar es org.junit.matchers.JUnitMatchers, por ejemplo: afirmar eso ("algo", JUnitMatchers.containsString ("algunos"));
Ewen Cartwright
1
El mensaje de falla para una falla assertThates mucho más útil que unassertTrue
Mike Rylander
3
importaciones estáticas necesarias son import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- sólo para salvar a alguien de problemas
EIS
44
... y org.hamcrest.Matchers.containsString;en la última api, en la hamcrest-librarydependencia.
EIS
13
use fest afirmar 2.0 siempre que sea posible EDITAR: afirmar puede tener más aserciones (una bifurcación)
No encontré un método contiene con AssertJ.assertThat. Esto es lo que encontré en su lugar: org.assertj.core.api.Assertions.assertThat (conversionException) .hasMessageContaining ("alguna subcadena");
Raj
lo siento, creo que mi comentario anterior no se ajusta al contexto de esta respuesta. Estaba en un caso de uso diferente donde necesito verificar una subcadena dentro de un mensaje de excepción.
Raj
8
Utilice el Hamcrest Matcher containsString()
// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError:Expected: a string containing "myName"
got:"some other name"
Opcionalmente, puede agregar un mensaje de error aún más detallado.
// 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"
Publiqué mi respuesta a una pregunta duplicada aquí
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");}}
Respuestas:
Si agrega Hamcrest y JUnit4, podría hacer:
Con algunas importaciones estáticas, se ve mucho mejor:
Las importaciones estáticas necesarias serían:
fuente
org.junit.Assert
versusjunit.framework.Assert
, ya que este último no tiene el Hamcrest MatcherassertThat()
assertThat
es mucho más útil que unassertTrue
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;
- sólo para salvar a alguien de problemasorg.hamcrest.Matchers.containsString;
en la última api, en lahamcrest-library
dependencia.use fest afirmar 2.0 siempre que sea posible EDITAR: afirmar puede tener más aserciones (una bifurcación)
fuente
Utilice el Hamcrest Matcher
containsString()
Opcionalmente, puede agregar un mensaje de error aún más detallado.
Publiqué mi respuesta a una pregunta duplicada aquí
fuente
Use la nueva
assertThat
sintaxis junto con Hamcrest .Está disponible a partir de JUnit 4.4 .
fuente
Es demasiado tarde, pero solo para actualizar lo hice con la siguiente sintaxis
fuente
Otra variante es
Además,
org.mockito.internal.matchers
hay algunos otros matizadores interesantes, comoStartWith
,Contains
etc.fuente
variante de aserción
fuente
Ejemplo (versión junit- 4.13)
fuente
He probado muchas respuestas en esta página, ninguna realmente funcionó:
Entonces, en lugar de escribir código legible, decidí usar el enfoque simple y viable mencionado en la pregunta.
Esperemos que surja otra solución.
fuente