IMO jest to dość miłe, sugerowane opcje są mniej czytelne
Ojciec Chrzestny
3
@ TheGodfather jest mniej czytelny, ale produkuje bardziej znaczące błędy asertywne (tj. Zaakceptowana odpowiedź pokaże różnicę w ciągach, gdzie jako rozwiązanie OP pokaże po prostu „Fałsz, gdy oczekiwany Prawda” w przypadku niepowodzenia)
Mike
Tym, co czyni aser „ładniejszym”, jest komunikat o błędzie, gdy się nie powiedzie. Jak czytelny jest w kodzie, ma to drugorzędne znaczenie, ponieważ nie musisz patrzeć na kod, dopóki się nie powiedzie, a komunikat o błędzie jest pierwszą rzeczą, którą zobaczysz.
rjmunro
Odpowiedzi:
291
Jeśli dodasz Hamcrest i JUnit4, możesz:
String x ="foo bar";Assert.assertThat(x,CoreMatchers.containsString("foo"));
W przypadku niektórych importów statycznych wygląda to znacznie lepiej:
Upewnij się, że używasz org.junit.Assertkontra junit.framework.Assert, ponieważ ten drugi nie ma Hamcrest MatcherassertThat()
Visionary Software Solutions
15
Myślę, że podczas uruchamiania JUnit 4.10 klasą do użycia jest org.junit.matchers.JUnitMatchers, np .: assertThat („coś”, JUnitMatchers.containsString („niektóre”));
Ewen Cartwright
1
Komunikat o niepowodzeniu assertThatjest o wiele bardziej pomocny niżassertTrue
Mike Rylander
3
import statyczne są potrzebne import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- wystarczy, aby uratować kogoś z kłopotów
eis
4
... i org.hamcrest.Matchers.containsString;w najnowszym API, w hamcrest-libraryzależności.
eis
13
w miarę możliwości używaj fest assert 2.0 EDYCJA: assertj może mieć więcej asercji (rozwidlenie)
Nie znalazłem metody zawierającej metodę AssertJ.assertThat. Właśnie to znalazłem - org.assertj.core.api.Assertions.assertThat (wyjątek konwersji) .hasMessageContaining („niektóre podciągi”);
Raj
przepraszam, myślę, że mój powyższy komentarz nie pasuje do kontekstu tej odpowiedzi. Miałem inny przypadek użycia, w którym muszę sprawdzić podciąg w komunikacie wyjątku.
Raj
8
Użyj narzędzia Hamcrest Matcher containsString()
// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError:Expected: a string containing "myName"
got:"some other name"
Możesz opcjonalnie dodać jeszcze bardziej szczegółowy komunikat o błędzie.
// 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"
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");}}
Odpowiedzi:
Jeśli dodasz Hamcrest i JUnit4, możesz:
W przypadku niektórych importów statycznych wygląda to znacznie lepiej:
Wymagany import statyczny to:
źródło
org.junit.Assert
kontrajunit.framework.Assert
, ponieważ ten drugi nie ma Hamcrest MatcherassertThat()
assertThat
jest o wiele bardziej pomocny niżassertTrue
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;
- wystarczy, aby uratować kogoś z kłopotóworg.hamcrest.Matchers.containsString;
w najnowszym API, whamcrest-library
zależności.w miarę możliwości używaj fest assert 2.0 EDYCJA: assertj może mieć więcej asercji (rozwidlenie)
źródło
Użyj narzędzia Hamcrest Matcher
containsString()
Możesz opcjonalnie dodać jeszcze bardziej szczegółowy komunikat o błędzie.
Wysłany moją odpowiedź na pytanie duplikatu tutaj
źródło
Użyj nowej
assertThat
składni razem z Hamcrestem .Jest dostępny od wersji JUnit 4.4 .
źródło
Jest już za późno, ale tylko do aktualizacji mam to zrobione z poniższą składnią
źródło
Innym wariantem jest
Ponadto w
org.mockito.internal.matchers
istnieje kilka innych ciekawych dopasowujących, jakStartWith
,Contains
etc.źródło
wariant assertj
źródło
Przykład (wersja junit 4.13)
źródło
Wypróbowałem wiele odpowiedzi na tej stronie, żadna tak naprawdę nie działała:
Dlatego zamiast pisać czytelny kod, zdecydowałem się zastosować proste i praktyczne podejście wspomniane w pytaniu.
Mam nadzieję, że pojawi się inne rozwiązanie.
źródło