2016-05-11 1 views
0

Я пытаюсь использовать dataProvider, который предоставляет грамматику для синтаксического анализатора и ожидаемой ошибки.Testng Ожидаемые сообщения об ошибках с ANTLR 4

@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 ';'"}, 
    }; 
} 

Где это говорит expectedExceptionsMessageRegExp = ".* line .* я хочу, чтобы иметь возможность использовать вторую часть массива в DataProvider в.

Как видно в dataProvider, брошенное сообщение будет отличаться в зависимости от того, какую грамматику я использую в качестве входных данных, и это то, что я хочу проверить.

ответ

2

Вам нужно будет использовать один из методов Assert в TestNG, чтобы сделать это. Вы не можете изменить значение атрибута в Annotation на лету до тех пор, пока вы не захотите использовать отражения, чтобы сделать это ... но на мой взгляд, что будет превышать простое требование, которое может быть достигнуто путем использования утверждений.
EDIT1: Assert.assertThrows или Assert.expectThrows или просто добавив, что блок кода в try { } catch(ParseCancellationException p) {} блоке, а затем в поймать блок захвата сообщения исключений и утверждают, что с Assert.assertEquals(actualErrorMessage,expectedErrorMessage)

+0

Используя утверждение было что-то я думал об этом, но как я могу проверить сообщение об исключении в утверждении? – darophi