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)断言
我考虑过使用断言,但如何在断言中检查异常消息?我考虑过使用断言,但如何在断言中检查异常消息?