ИМО, это достаточно приятно, предлагаемые варианты менее читабельны
Крестный отец
3
@TheGodfather менее читабелен, но выдает более значимые ошибки утверждений (т. Е. Принятый ответ покажет разницу в строках, в то время как решение OP просто покажет «False, когда ожидается True» при
Майк
Что делает утверждение «лучше», так это сообщение об ошибке, когда оно терпит неудачу. Насколько читабельным он является в коде, является вторичным по отношению к этому, потому что вам не нужно смотреть на код, пока он не выйдет из строя, и сообщение об ошибке - первое, что вы увидите.
rjmunro
Ответы:
291
Если вы добавите в Hamcrest и JUnit4, вы можете сделать:
String x ="foo bar";Assert.assertThat(x,CoreMatchers.containsString("foo"));
С некоторым статическим импортом это выглядит намного лучше:
Убедитесь, что вы используете org.junit.Assertпротив junit.framework.Assert, так как последний не имеет Hamcrest MatcherassertThat()
Visionary Software Solutions
15
Я думаю, что при запуске JUnit 4.10 используется класс org.junit.matchers.JUnitMatchers, например: assertThat («что-то», JUnitMatchers.containsString («некоторые»));
Юэн Картрайт,
1
Сообщение об ошибке для сбоя assertThatгораздо полезнее, чемassertTrue
Майк Райландер
3
статический импорт Необходимый import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;- просто чтобы спасти кого - то от беды
эйс
4
... и org.hamcrest.Matchers.containsString;в последнем API, в hamcrest-libraryзависимости.
эйс
13
по возможности используйте fest assert 2.0. РЕДАКТИРОВАТЬ: assertj может иметь больше утверждений (разветвление)
Я не нашел метод содержимого с AssertJ.assertThat. Это то, что я нашел вместо этого - org.assertj.core.api.Assertions.assertThat (translationException) .hasMessageContained ("некоторая подстрока");
Радж
извините, я думаю, что мой комментарий выше не соответствует контексту этого ответа. Я был в другом случае, когда мне нужно проверить подстроку в сообщении об исключении.
Радж
8
Используйте Matcher Hamcrest containsString()
// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));// Error Message
java.lang.AssertionError:Expected: a string containing "myName"
got:"some other name"
Вы можете по желанию добавить еще более подробное сообщение об ошибке.
// 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"
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");}}
Ответы:
Если вы добавите в Hamcrest и JUnit4, вы можете сделать:
С некоторым статическим импортом это выглядит намного лучше:
Необходим статический импорт:
источник
org.junit.Assert
противjunit.framework.Assert
, так как последний не имеет Hamcrest MatcherassertThat()
assertThat
гораздо полезнее, чемassertTrue
import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;
- просто чтобы спасти кого - то от бедыorg.hamcrest.Matchers.containsString;
в последнем API, вhamcrest-library
зависимости.по возможности используйте fest assert 2.0. РЕДАКТИРОВАТЬ: assertj может иметь больше утверждений (разветвление)
источник
Используйте Matcher Hamcrest
containsString()
Вы можете по желанию добавить еще более подробное сообщение об ошибке.
Разместил мой ответ на дубликат вопроса здесь
источник
Используйте новый
assertThat
синтаксис вместе с Hamcrest .Доступно начиная с JUnit 4.4 .
источник
Слишком поздно, но просто для обновления я сделал это с приведенным ниже синтаксисом
источник
Другой вариант
Кроме того,
org.mockito.internal.matchers
есть и другие интересные совпадения, напримерStartWith
,Contains
и т. Д.источник
Assertj вариант
источник
Пример (версия junit - 4.13)
источник
Я перепробовал много ответов на этой странице, но ни один из них не сработал:
Поэтому вместо написания читабельного кода я решил вместо этого использовать простой и работоспособный подход, упомянутый в вопросе.
Надеюсь, найдется другое решение.
источник