JUnit - 预期的异常消息正则表达式

时间:2015-01-05 14:16:16

标签: java testing junit testng

我正在从TestNg切换到JUnit。我需要将预期的异常消息与预定义的正则表达式匹配,例如在以下TestNg代码中:

@Test(expectedExceptions = SomeClass.class, expectedExceptionsMessageRegExp = "**[123]regexExample*")
    public void should_throw_exception_when_...() throws IOException {
        generatesException();
    }

工作正常,但我无法在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();
}

但是方法expectedEx.expectMessage("**[123]regexExample*");不支持正则表达式,我需要为它提供准确的硬编码消息。我已经看到这可以通过使用Matcher提供该方法来实现,但我不确定如何正确地完成它。

这样做有什么好办法吗?

2 个答案:

答案 0 :(得分:8)

您可以使用StringContains匹配器吗?

expectedEx.expectMessage(StringContains.containsString("regexExample"));

不幸的是,库中没有正则表达式匹配器(我知道)。许多人已经实施了自己的。

答案 1 :(得分:7)

怎么样......

@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);
     }
  };
}