Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JUnit-预期的异常消息正则表达式_Java_Testing_Junit_Testng - Fatal编程技术网

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

Java JUnit-预期的异常消息正则表达式,java,testing,junit,testng,Java,Testing,Junit,Testng,我正在从TestNg切换到JUnit。我需要将预期的异常消息与预定义的正则表达式相匹配,例如在以下TestNg代码中: @Test(expectedExceptions = SomeClass.class, expectedExceptionsMessageRegExp = "**[123]regexExample*") public void should_throw_exception_when_...() throws IOException { generates

我正在从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]regexample*”)
不支持正则表达式,我需要为它提供精确的硬编码消息。我已经看到,通过使用Matcher提供该方法可以实现这一点,但我不确定如何正确地做到这一点

有什么好办法吗?

你能用火柴吗


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

@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);
     }
  };
}
@规则
public ExpectedException expectedEx=ExpectedException.none();
@试验
public void test1()引发IOException{
expectedEx.expect(SomeClass.class);
expectedEx.expectMessage(matchesRegex(“**[123]regexample*”));
GenerateException();
}
私有匹配器matchesRegex(最终字符串正则表达式){
返回新的TypeSafeMatcher(){
@凌驾
受保护的布尔匹配安全(最终字符串项){
返回项。匹配项(正则表达式);
}
};
}

另一种解决方法,但您可以在测试中捕获预期的异常,并使用正则表达式断言消息是正确的。和
assert.fail()+1.
@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);
     }
  };
}