2017-08-25 1 views
0

Ich habe eine Reihe von Tests in meiner Testsuite.TestNG: Wie Testergebnisse in einer gemeinsamen Funktion validiert werden

@Test 
public void test1() { 
    // test 1 
    assert... 
} 

@Test 
public void test2() { 
    // test 2 
    assert... 
} 

Ich habe eine andere Methode namens ‚verify()‘, die einige zusätzliche tut behauptet, nachdem die Tests abgeschlossen sind.

void verify() { 
    // more asserts that are common to test1() and test2() 
} 

Zur Verwendung dieser behauptet in verify(), die einfache Art und Weise machen ich ist denken kann() am Ende jedes Tests hinzufügen zu überprüfen. Aber gibt es einen eleganteren oder einfacheren Weg?

Ich sah TestNG @ AfterMethod (und @ AfterTest). Wenn ich @AfterMethod zu verify() hinzufüge, werden die Assets in verify() ausgeführt. Aber wenn die Behauptungen bestehen, erscheinen sie nicht im Testbericht. Wenn die Bestätigung fehlschlägt, werden diese Fehler als Konfigurationsfehler und nicht als Testfehler gekennzeichnet.

Wie kann ich sicherstellen, dass verify() immer aufgerufen wird, nachdem jeder Test ausgeführt wurde, und weiterhin die Ergebnisse von Asserts innerhalb der verify() als Teil der Testergebnisse meldet?

Danke!

Antwort

2

Sie können Ihre Testklasse grundsätzlich die Schnittstelle org.testng.IHookable implementieren lassen.

Wenn TestNG sieht, dass eine Klasse diese Schnittstelle implementiert, dann ist TestNG nicht Ihre @Test Methoden direkt aufrufen, sondern ruft sie die run() Methode aus der IHookable Umsetzung von worin Sie erwartet werden, die Testmethodenaufruf ausgelöst wird, um den Aufruf Rückruf an die org.testng.IHookCallBack, die an Sie weitergegeben wird.

Hier ist ein Beispiel, das diese in Aktion zeigt:

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

public class MyTestClass implements IHookable { 
    @Override 
    public void run(IHookCallBack callBack, ITestResult testResult) { 
     callBack.runTestMethod(testResult); 
     commonTestCode(); 
    } 

    public void commonTestCode() { 
     System.err.println("commonTestCode() executed."); 

    } 

    @Test 
    public void testMethod1() { 
     System.err.println("testMethod1() executed."); 
    } 

    @Test 
    public void testMethod2() { 
     System.err.println("testMethod2() executed."); 
    } 
} 

Hier die Ausgabe der Ausführung ist:

testMethod1() executed. 
commonTestCode() executed. 
testMethod2() executed. 
commonTestCode() executed. 

=============================================== 
Default Suite 
Total tests run: 2, Failures: 0, Skips: 0 
=============================================== 
Verwandte Themen