2017-08-25 3 views
0

J'ai une batterie de tests dans ma suite de tests. J'ai une autre méthode appelée 'verify()' qui fait quelques affirmations supplémentaires après que les tests sont terminés.TestNG: Comment valider les résultats de test dans une fonction commune

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

Pour utiliser ces AFFIRME vérifier dans(), la manière simple que je peux penser est d'ajouter verify() à la fin de chaque test. Mais y a-t-il un moyen plus élégant ou plus simple que cela?

J'ai regardé @AfterMethod (et @AfterTest) de TestNG. Si j'ajoute @AfterMethod à verify(), les assertions dans verify() sont exécutées. Mais si les affirmations passent, elles n'apparaissent pas dans le rapport d'essai. Si l'assertion échoue, ces échecs sont marqués comme des échecs de configuration et non des échecs de test.

Comment puis-je m'assurer que verify() est toujours appelé après l'exécution de chaque test et qu'il continue de rapporter les résultats des asserts dans verify() dans le cadre des résultats du test?

Merci!

Répondre

2

Vous pouvez faire en sorte que votre classe de test implémente l'interface org.testng.IHookable.

Quand TestNG voit qu'une classe implémente cette interface, TestNG ne remet pas vos @Test méthodes directement, mais il appelle la méthode run() de la mise en œuvre IHookable de laquelle vous êtes censé déclencher l'appel de la méthode d'essai en invoquant la rappel sur le org.testng.IHookCallBack qui vous est transmis.

Voici un exemple qui montre en action:

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."); 
    } 
} 

est ici la sortie de l'exécution:

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

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