2016-05-11 8 views
0

私はparserとexpectederrormessageの文法を提供するdataProviderを使用しようとしています。それはexpectedExceptionsMessageRegExp = ".* line .*私はdataProviderのの配列の第2の部分を使用することができるようにしたいと言う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 ';'"}, 
    }; 
} 

dataProviderに表示されるように、投げられたメッセージは、私が入力として使用する文法の種類によって異なります、そして、それは私がテストしたいものです。

答えて

2

TestNGでAssertメソッドの1つを使用する必要があります。アノテーションで属性値を変更することはできません。また、リフレクションを使用するまでは変更できません。アサーションを使うだけで達成できる簡単な要件を殺すことになります。
EDIT1:Assert.assertThrowsまたはAssert.expectThrowsまたは単にtry { } catch(ParseCancellationException p) {}ブロックにそのコードブロックを追加することによって、その後のcatchブロックキャプチャ例外メッセージにアサーションを使用してAssert.assertEquals(actualErrorMessage,expectedErrorMessage)

+0

とそれを主張は、私が考えたものだったが、どのように私は例外メッセージを確認することができますアサーションで? – darophi

関連する問題