Assert包含jUnit中的字符串

rip*_*234 174 java string junit assert

是否有更好的方式在jUnit中编写

String x = "foo bar";
Assert.assertTrue(x.contains("foo"));
Run Code Online (Sandbox Code Playgroud)

Yis*_*hai 273

如果你添加Hamcrest和JUnit4,你可以这样做:

String x = "foo bar";
Assert.assertThat(x, CoreMatchers.containsString("foo"));
Run Code Online (Sandbox Code Playgroud)

使用一些静态导入,它看起来好多了:

assertThat(x, containsString("foo"));
Run Code Online (Sandbox Code Playgroud)

所需的静态导入将是:

import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.containsString;
Run Code Online (Sandbox Code Playgroud)

  • 我认为在运行JUnit 4.10时,要使用的类是org.junit.matchers.JUnitMatchers,例如:assertThat("something",JUnitMatchers.containsString("some")); (15认同)
  • 一定要使用`org.junit.Assert`和`junit.framework.Assert`,因为后者没有Hamcrest Matcher`assertThat()` (8认同)
  • 所需的静态导入是`import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.containsString;` - 只是为了避免有人遇到麻烦 (3认同)
  • ...和`org.hamcrest.Matchers.containsString;`在最新的api中,在`hamcrest-library`依赖项中. (3认同)
  • 失败的 `assertThat` 的失败消息比 `assertTrue` 更有帮助 (2认同)

pio*_*rek 10

尽可能使用fest assert 2.0编辑:assertj可能有更多的断言(一个分支)

assertThat(x).contains("foo");
Run Code Online (Sandbox Code Playgroud)


use*_*602 10

您可以使用assertj流畅的断言。它具有许多功能,可以以更易于阅读的用户友好方式编​​写断言。

在你的情况下,这将是

 String x = "foo bar";
 assertThat(x).contains("foo");
Run Code Online (Sandbox Code Playgroud)

它不仅适用于字符串,还可以用于以更友好的方式断言列表、集合等


小智 8

示例(junit 版本 - 4.13)

import static org.assertj.core.api.Assertions.assertThat;
import org.junit.Test;

public class TestStr {

@Test
public void testThatStringIsContained(){
    String testStr = "hi,i am a test string";
    assertThat(testStr).contains("test");
 }

}
Run Code Online (Sandbox Code Playgroud)


Mik*_*der 7

使用hamcrest Matcher containsString()

// Hamcrest assertion
assertThat(person.getName(), containsString("myName"));

// Error Message
java.lang.AssertionError:
Expected: a string containing "myName"
     got: "some other name"
Run Code Online (Sandbox Code Playgroud)

您可以选择添加更详细的错误消息.

// 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"
Run Code Online (Sandbox Code Playgroud)

在这里发表我的回答重复的问题


Rob*_*anu 5

将新assertThat语法与Hamcrest一起使用.

它从JUnit 4.4开始提供.


rns*_*rns 5

为时已晚,但只是为了更新我使用以下语法完成了

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

Assert.assertThat("this contains test", StringContains.containsString("test"));
Run Code Online (Sandbox Code Playgroud)