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
还有一些其他有趣的匹配器,比如StartWith
, Contains
等
我已经尝试了很多在这个页面上的答案,没有真正的工作:
- org.hamcrest.CoreMatchers.containsString不编译,无法parsing方法。
- JUnitMatchers.containsString被删除 (并引用CoreMatchers.containsString )。
- org.hamcrest.Matchers.containsString :NoSuchMethodError
所以我停止了试图做出很好的可读代码,而是使用了问题中提到的简单可行的方法。