Fil*_*lip 8 java testing junit testng
我正在从TestNg切换到JUnit.我需要将预期的异常消息与预定义的正则表达式匹配,例如在以下TestNg代码中:
@Test(expectedExceptions = SomeClass.class, expectedExceptionsMessageRegExp = "**[123]regexExample*")
public void should_throw_exception_when_...() throws IOException {
generatesException();
}
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我无法在JUnit中实现相同的行为.我想出了这个解决方案:
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@Test
public void should_throw_exception_when_...() throws IOException {
expectedEx.expect(SomeClass.class);
expectedEx.expectMessage("**[123]regexExample*");
generatesException();
}
Run Code Online (Sandbox Code Playgroud)
但是方法expectedEx.expectMessage("**[123]regexExample*");不支持正则表达式,我需要为它提供精确的硬编码消息.我已经看到这可以通过使用Matcher提供该方法来实现,但我不确定如何正确地完成它.
这样做有什么好办法吗?
你能使用StringContains Matcher吗?
expectedEx.expectMessage(StringContains.containsString("regexExample"));
Run Code Online (Sandbox Code Playgroud)
不幸的是,库中没有正则表达式匹配器(我知道).许多人已经实施了自己的.
怎么样......
@Rule
public ExpectedException expectedEx = ExpectedException.none();
@Test
public void test1() throws IOException {
expectedEx.expect(SomeClass.class);
expectedEx.expectMessage(matchesRegex("**[123]regexExample*"));
generatesException();
}
private Matcher<String> matchesRegex(final String regex) {
return new TypeSafeMatcher<String>() {
@Override
protected boolean matchesSafely(final String item) {
return item.matches(regex);
}
};
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5241 次 |
| 最近记录: |