AssertContains по строкам в jUnit

Есть ли лучший способ написать в jUnit

String x = "foo bar";
Assert.assertTrue(x.contains("foo"));

Ответ 1

Если вы добавите в Hamcrest и JUnit4, вы можете сделать:

String x = "foo bar";
Assert.assertThat(x, CoreMatchers.containsString("foo"));

С некоторым статическим импортом это выглядит намного лучше:

assertThat(x, containsString("foo"));

Необходимый статический импорт:

import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.containsString;

Ответ 2

используйте fest assert 2.0, когда это возможно. EDIT: assertj может иметь больше утверждений (вилка)

assertThat(x).contains("foo");

Ответ 3

Используйте hamcrest Matcher 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"

Отправленный мой ответ на дублированный вопрос здесь

Ответ 4

Используйте новый синтаксис assertThat вместе с Hamcrest.

Он доступен, начиная с JUnit 4.4.

Ответ 5

Другой вариант

Assert.assertThat(actual, new Matches(expectedRegex));

Кроме того, в org.mockito.internal.matchers есть еще несколько интересных совпадений, таких как StartWith, Contains и т.д.

Ответ 6

С AssertJ 3.11.1 это сработало для меня.

org.assertj.core.api.Assertions.assertThat(conversionException).hasMessageContaining("some substring");

Ответ 7

Это слишком поздно, но просто чтобы обновить, я сделал это с синтаксисом ниже

import org.hamcrest.core.StringContains;
import org.junit.Assert;

Assert.assertThat("this contains test", StringContains.containsString("test"));

Ответ 8

Я перепробовал много ответов на этой странице, но ни один из них не сработал:

  • org.hamcrest.CoreMatchers.containsString не компилируется, не может разрешить метод.
  • JUnitMatchers.containsString исключен (и ссылается на CoreMatchers.containsString).
  • org.hamcrest.Matchers.containsString: NoSuchMethodError

Поэтому вместо того, чтобы писать читаемый код, я решил вместо этого использовать простой и работоспособный подход, упомянутый в вопросе.

Надеюсь, найдется другое решение.