IMO isso é bom o suficiente, as opções sugeridas são menos legível
The Godfather
3
Erros de declaração mais significativas @TheGodfather menos legível, mas produzem (ou seja, a resposta aceita irá mostrar a diferença de cordas, onde, como solução PO só vai mostrar "False quando esperado True" em caso de falha)
Mike
O que torna uma afirmação "mais agradável" é a mensagem de erro quando falha. A legibilidade do código é secundária a isso, porque você não precisa olhar o código até ele falhar, e a mensagem de falha é a primeira coisa que você vê.
rjmunro 12/03
Respostas:
291
Se você adicionar o Hamcrest e o JUnit4, poderá fazer:
String x ="foo bar";Assert.assertThat(x,CoreMatchers.containsString("foo"));
Com algumas importações estáticas, parece muito melhor:
Certifique-se de que você está usando org.junit.Assertcontra junit.framework.Assert, pois este último não tem a Hamcrest MatcherassertThat()
Visionary Software Solutions
15
Acho que ao executar o JUnit 4.10, a classe a ser usada é org.junit.matchers.JUnitMatchers, por exemplo: assertThat ("something", JUnitMatchers.containsString ("some"));
Ewen Cartwright
1
A mensagem de falha de uma falha assertThaté muito mais útil, então umaassertTrue
Mike Rylander
3
importações estáticas necessários são import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- apenas para salvar alguém de problemas
eis
4
... e org.hamcrest.Matchers.containsString;na API mais recente, na hamcrest-librarydependência.
Não encontrei um método contains com AssertJ.assertThat. Foi isso que encontrei - org.assertj.core.api.Assertions.assertThat (conversionException) .hasMessageContaining ("some substring");
Raj
desculpe, acho que meu comentário acima não se adequa ao contexto desta resposta. Eu estava em um caso de uso diferente, em que preciso verificar se há uma substring em uma mensagem de exceção.
Raj
8
Usar o hamcrest Matcher containsString()
// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError:Expected: a string containing "myName"
got:"some other name"
Você pode adicionar opcionalmente uma mensagem de erro ainda mais detalhada.
// 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"
Postado minha resposta a uma pergunta duplicado aqui
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");}}
Respostas:
Se você adicionar o Hamcrest e o JUnit4, poderá fazer:
Com algumas importações estáticas, parece muito melhor:
As importações estáticas necessárias seriam:
fonte
org.junit.Assert
contrajunit.framework.Assert
, pois este último não tem a Hamcrest MatcherassertThat()
assertThat
é muito mais útil, então umaassertTrue
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;
- apenas para salvar alguém de problemasorg.hamcrest.Matchers.containsString;
na API mais recente, nahamcrest-library
dependência.use fest assert 2.0 sempre que possível EDIT: assertj pode ter mais asserções (um fork)
fonte
Usar o hamcrest Matcher
containsString()
Você pode adicionar opcionalmente uma mensagem de erro ainda mais detalhada.
Postado minha resposta a uma pergunta duplicado aqui
fonte
Use a nova
assertThat
sintaxe junto com o Hamcrest .Está disponível a partir do JUnit 4.4 .
fonte
É tarde demais, mas apenas para atualizar, eu fiz com a sintaxe abaixo
fonte
Outra variante é
Além disso, em
org.mockito.internal.matchers
há algumas outras matchers interessantes, comoStartWith
,Contains
etc.fonte
variante assertj
fonte
Exemplo (versão junit - 4.13)
fonte
Eu tentei muitas respostas nesta página, nenhuma realmente funcionou:
Então, em vez de escrever código legível, decidi usar a abordagem simples e viável mencionada na pergunta.
Espero que outra solução seja apresentada.
fonte