2017-09-12 2 views
0

expectedExceptionsMessageRegExpがdetailMessageフィールドに一致させようとしています。原因テキストを一致させることはできますか?つまり、Exception.getCause()によって返されるテキスト? detailMessageフィールドが非常に汎用的なメッセージを提供し、期待されるメッセージがそのテキストと一致する場合、テストケースの目的を上回るためです。TestNG expectedExceptionsMessageRegExpを使用して原因テキストを照合することはできますか?

@Test(expectedExceptions = TestExecutionException.class, expectedExceptionsMessageRegExp = ".* HTTP 422.*") 
public void test() throws Exception { 
    .. 
    //some code that produces TestExecutionException with the cause HTTP 422 
    .. 
} 

TestNGのエラーがある:

The exception was thrown with the wrong message: expected ".* HTTP 422.*" but got "Failed executing MessageExecutionTask" 
    at org.testng.internal.Invoker.handleInvocationResults(Invoker.java:1481) 
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:754) 
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901) 
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231) 
    ... 16 more 

答えて

0

TestNGのは、テストクラスをインスタンス化してから@Testメソッドを呼び出すためにリフレクションに依存しています。従って、@Testメソッドからの例外はjava.lang.reflect.InvocationTargetExceptionを引き起こし、getCause()は実際には@Testメソッドによって例外が発生します。

はTestNGのが発生し、その後@Test注釈のexpectedExceptionsMessageRegExp属性を介して供給された正規表現を使用してそれを試してみて、一致した例外のエラーメッセージを取得するためにInvocationTargetException.getCause().getMessage()を照会するように設計されています。ここで

はTestNGの6.12

import org.testng.ITestResult; 
import org.testng.annotations.AfterMethod; 
import org.testng.annotations.Test; 

public class TestClass { 

    @Test(expectedExceptions = OldMonkException.class, expectedExceptionsMessageRegExp = ".* HTTP 422.*") 
    public void test() throws Exception { 
     throw new OldMonkException("Your have triggered a HTTP 422 error code."); 
    } 

    @AfterMethod 
    public void afterTestMethod(ITestResult testResult) { 
     String mname = testResult.getMethod().getMethodName() + " "; 
     switch (testResult.getStatus()) { 
      case ITestResult.SUCCESS: 
       mname += "passed"; 
       break; 
      case ITestResult.FAILURE: 
       mname += "failed"; 
       break; 
      case ITestResult.SKIP: 
       mname += "skipped"; 
       break; 
      default: 
       mname += ""; 
     } 
     System.err.println(mname); 
    } 

    public static class OldMonkException extends Exception { 
     OldMonkException(String message) { 
      super(message); 
     } 
    } 
} 
と正常に動作例を示します
関連する問題