AssertContains在jUnit中的string

有没有更好的方式来写在jUnit

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

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

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

随着一些静态import,它看起来好多了:

 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一起使用新的assertThat语法。

它可以从JUnit 4.4开始。

使用hamcrest Matcher containsString()

 // Hamcrest assertion assertThat(person.getName(), containsString("myName")); // Error Message java.lang.AssertionError: Expected: a string containing "myName" got: "some other name" 

你可以select添加一个更详细的错误信息。

 // 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" 

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

另一个变种是

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

而且在org.mockito.internal.matchers还有一些其他有趣的匹配器,比如StartWithContains

我已经尝试了很多在这个页面上的答案,没有真正的工作:

  • org.hamcrest.CoreMatchers.containsString不编译,无法parsing方法。
  • JUnitMatchers.containsString删除 (并引用CoreMatchers.containsString )。
  • org.hamcrest.Matchers.containsString :NoSuchMethodError

所以我停止了试图做出很好的可读代码,而是使用了问题中提到的简单可行的方法。