Java Testng预期错误消息与ANTLR 4

Java Testng预期错误消息与ANTLR 4,java,testing,testng,antlr,grammar,Java,Testing,Testng,Antlr,Grammar,我正在尝试使用一个数据提供者,它为解析器和预期的错误消息提供语法 @Test(expectedExceptions = org.antlr.v4.runtime.misc.ParseCancellationException.class, expectedExceptionsMessageRegExp = ".*line .*", dataProvider = "antlrInput") public void TestParsing(String input, String empty) th

我正在尝试使用一个数据提供者,它为解析器和预期的错误消息提供语法

@Test(expectedExceptions = org.antlr.v4.runtime.misc.ParseCancellationException.class, expectedExceptionsMessageRegExp = ".*line .*", dataProvider = "antlrInput")
public void TestParsing(String input, String empty) throws ParseCancellationException {
    ProgramLexer lexer = new ProgramLexer(new ANTLRInputStream(input));
    lexer.removeErrorListeners();
    lexer.addErrorListener(DescriptiveErrorListener.INSTANCE);
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    ProgramParser parser = new ProgramParser(tokens);
    parser.removeErrorListeners();
    parser.addErrorListener(DescriptiveErrorListener.INSTANCE);
    ParseTree tree = parser.program();
}

@DataProvider
public Object[][] antlrInput() {
    return new Object[][] {
            {"int x", "line 1:5 missing ';' at '<EOF>'"},
            {"int x, d", "line 1:5 mismatched input ',' expecting ';'"},
    };
}
@Test(expectedExceptions=org.antlr.v4.runtime.misc.ParseCancellationException.class,expectedExceptionsMessageRegExp=“*line.*”,dataProvider=“antlInput”)
公共void TestParsing(字符串输入,字符串为空)引发ParseCancellationException{
ProgramLexer lexer=新的ProgramLexer(新的AntlInputStream(输入));
lexer.removeErrorListeners();
addErrorListener(DescriptiveErrorListener.INSTANCE);
CommonTokenStream令牌=新的CommonTokenStream(lexer);
ProgramParser=新的ProgramParser(标记);
removeErrorListeners();
addErrorListener(DescriptiveErrorListener.INSTANCE);
ParseTree=parser.program();
}
@数据提供者
公共对象[][]AntlInput(){
返回新对象[][]{
{“int x”,“第1:5行缺少“;”处的“,”,
{“int x,d”,“第1:5行输入不匹配”,“应为“;”,
};
}
其中显示
expectedExceptionsMessageRegExp=“*line.*.
我希望能够使用数据提供程序数组的第二部分


从dataProvider中可以看出,抛出的消息将根据我用作输入的语法类型而有所不同,而这正是我要测试的内容。

您需要使用TestNG中的一个
Assert
方法来实现这一点。。除非您想使用r,否则您不能动态更改注释处的属性值但在我看来,这将过分扼杀一个只需使用断言即可实现的简单需求。

EDIT1:
Assert.assertThrows
Assert.expectThrows
或只需将该代码块添加到
try{}catch(ParseCancellationException p){}
块中,然后在catch块中捕获异常消息并使用
Assert.assertEquals(actualErrorMessage,expectedErrorMessage)断言

您需要使用TestNG中的一个
Assert
方法来完成此操作。除非您想使用反射来完成此操作,否则您不能动态更改注释处的属性值。但在我看来,这会扼杀一个仅使用断言即可实现的简单需求。

EDIT1:
Assert.assertThrows
Assert.expectThrows
或只需将该代码块添加到
try{}catch(ParseCancellationException p){}
块中,然后在catch块中捕获异常消息并使用
Assert.assertEquals(actualErrorMessage,expectedErrorMessage)断言

我考虑过使用断言,但如何在断言中检查异常消息?我考虑过使用断言,但如何在断言中检查异常消息?