[java] AssertjUnit의 문자열에 포함

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;


답변

가능하면 fest assert 2.0 사용 편집 : assertj에 더 많은 어설 션이있을 수 있습니다 (포크)

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


답변

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"

중복 질문에 대한 답변을 여기에 게시 했습니다.


답변

새로운 assertThat구문을 Hamcrest 와 함께 사용하십시오 .

JUnit 4.4 부터 사용할 수 있습니다 .


답변

너무 늦었지만 업데이트하기 위해 아래 구문으로 완료했습니다.

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

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


답변

다른 변형은

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

또한에 org.mockito.internal.matchers다른 흥미로운 매처 (matcher), 같은있다 StartWith, Contains


답변

assertj 변형

import org.assertj.core.api.Assertions;
Assertions.assertThat(actualStr).contains(subStr);