2017-12-12 5 views
0

Ich möchte meine Unit-Test-Klassen für den Fehlercode (was eine benutzerdefinierte Eigenschaft meiner Ausnahmeklasse ist) überprüfen und bestätigen, wenn eine Ausnahme aus dem getesteten ausgelöst wird Code. Kann ich dies mit Tests tun?Testng: Assert mit Fehlercode, eine benutzerdefinierte Eigenschaft der benutzerdefinierten Ausnahme Instanz

Ich habe folgende Ausnahmeklasse:

public final class CustomException extends Exception { 

    public CustomException(String msg,String errorCode,Throwable cause) { 
     super(msg,cause); 
     this.errorCode = errorCode; 
    } 

    private String errorCode; 

    public String getErrorCode() { 
     return this.errorCode; 
    } 
} 

My Unit Test Klasse:

import org.testng.annotations.Test; 

public class MyUnitTestClass { 


    @Test(priority = 25, 
      expectedExceptions = CustomException.class, 
      expectedExceptionsMessageRegExp = "Error while doing something.") 
    public void testDoSomething() { 
     // code to invoke doSomething(); 
     // which throws CustomException on some exception. 
    } 
} 

Statt expectedExceptionsMessageRegExp="Error while doing something." ich möchte auf einem Fehlercode Eg behaupten: wie "ERR100909", die sein wird, in der errorCode-Eigenschaft der CustomException-Klasse festgelegt.

Unit Test Framework: testng Version: 6.9.4

Dank!

Antwort

2

Eine Möglichkeit, dies zu erreichen, ist die Implementierung der Schnittstelle IHookable. Hier ist ein Beispiel, das dies in Aktion zeigt.

import org.testng.IHookCallBack; 
import org.testng.IHookable; 
import org.testng.ITestResult; 
import org.testng.annotations.Test; 

import java.util.Arrays; 
import java.util.List; 

public class MyUnitTestClass implements IHookable { 
    private List<String> errorCodes = Arrays.asList("ERR100909", "ERR100"); 

    @Override 
    public void run(IHookCallBack callBack, ITestResult testResult) { 
     callBack.runTestMethod(testResult); 
     Throwable t = testResult.getThrowable(); 
     if (t != null) { 
      t = t.getCause(); 
     } 
     boolean shouldFail = (t instanceof CustomException && errorCodes.contains(((CustomException) t).getErrorCode())); 
     if (!shouldFail) { 
      testResult.setThrowable(null); 
      testResult.setStatus(ITestResult.SUCCESS); 
     } 
    } 

    @Test 
    public void test1() throws CustomException { 
     throw new CustomException("test", "ERR100", new Throwable()); 
    } 

    @Test 
    public void test2() throws CustomException { 
     throw new CustomException("test", "ERR500", new Throwable()); 
    } 
} 
Verwandte Themen