2017-09-12 7 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); 
     } 
    } 
} 
와 잘 실행 예입니다