2017-09-12 5 views
0

expectedExceptionsMessageRegExp essaie de faire correspondre le champ detailMessage. Pouvons-nous faire correspondre le texte de la cause? Est-ce que le texte renvoyé par Exception.getCause()? Cela est dû au fait que le champ detailMessage donne un message très générique et qu'il va dépasser l'objectif du test élémentaire si le message attendu correspond à ce texte.Pouvons-nous utiliser TestNG expectedExceptionsMessageRegExp pour faire correspondre le texte de cause?

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

L'erreur est 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 

Répondre

0

TestNG repose sur la réflexion à instancier votre classe de test, puis appeler la méthode @Test. Ainsi, une exception de la méthode @Test déclencherait un java.lang.reflect.InvocationTargetException dont getCause() entraînerait l'exception générée par la méthode @Test.

TestNG est conçu pour interroger le InvocationTargetException.getCause().getMessage() pour obtenir le message d'erreur de l'exception qui a été soulevée puis essayer de correspondre à l'aide de l'expression régulière qui est fournie par l'attribut expectedExceptionsMessageRegExp de l'annotation @Test.

Voici un exemple qui fonctionne très bien avec 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); 
     } 
    } 
}