Вопрос

Есть ли более приятный способ писать в jUnit?

String x = "foo bar";
Assert.assertTrue(x.contains("foo"));
Это было полезно?

Решение

Если вы добавите 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.0 по возможности РЕДАКТИРОВАТЬ: утверждатьj может иметь больше утверждений (вилка)

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

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

Опубликовал ответ на повторяющийся вопрос здесь

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

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

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

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

Более того, в org.mockito.internal.matchers есть и другие интересные совпадения, например StartWith, Contains и т. д.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top