2010-11-26 35 views
4

Je prévu la sortie suivante:Ordre de Maven + Surefire + testng - BeforeClass, BeforeTest, Test, Test, AfterTest, AfterClass

Running TestSuite 
[DEBUG] beforeClass 
[DEBUG] beforeTest 
[DEBUG] test 
[DEBUG] afterTest 
[DEBUG] beforeTest 
[DEBUG] test 
[DEBUG] afterTest 
[DEBUG] afterClass 

Mais au lieu, cela se passe en réalité. Notez 2 problèmes: BeforeClass s'exécute après BeforeTest. Deuxièmement, Before/AfterTest exécute une fois.

Running TestSuite 
[DEBUG] beforeTest 
[DEBUG] beforeClass 
[DEBUG] test 
[DEBUG] test 
[DEBUG] afterClass 
[DEBUG] afterTest 

Voici le code.

import org.testng.annotations.AfterClass; 
import org.testng.annotations.AfterTest; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.BeforeTest; 
import org.testng.annotations.Test; 
public class TestNgAnnoTest { 
    @BeforeClass 
    public void beforeClass(){ 
     System.out.println("beforeClass"); 
    } 
    @BeforeTest 
    public void beforeTest(){ 
     System.out.println("beforeTest"); 
    } 
    @Test 
    public void test1(){ 
     System.out.println("test"); 
    } 
    @Test 
    public void test2(){ 
     System.out.println("test"); 
    } 
    @AfterTest 
    public void afterTest(){ 
     System.out.println("afterTest"); 

    } 
    @AfterClass 
    public void afterClass(){ 
     System.out.println("afterClass"); 
    } 
} 

Pour tous les curieux de versions de l'outil: java macosx/1.6.0_22, mvn: 2.2.1, 2.6 surefire, testng 5.14.2

Répondre

5

moi stupide. Confused After/BeforeTest avec After/BeforeMethod.

[DEBUG] beforeClass 
[DEBUG] beforeMethod 
[DEBUG] test 
[DEBUG] afterMethod 
[DEBUG] beforeMethod 
[DEBUG] test 
[DEBUG] afterMethod 
[DEBUG] afterClass 

Remplacer After/BeforeTest a produit le bon ordre d'exécution.

@BeforeClass 
    public static void beforeClass(){ 
     log.debug("beforeClass"); 
    } 

    @BeforeMethod 
    public void beforeMethod(){ 
     log.debug("beforeMethod"); 
    } 

    @Test 
    public void test1(){ 
     log.debug("test"); 
    } 

    @Test 
    public void test2(){ 
     log.debug("test"); 
    } 

    @AfterMethod 
    public void afterMethod(){ 
     log.debug("afterMethod"); 

    } 

    @AfterClass 
    public void afterClass(){ 
     log.debug("afterClass"); 
    } 
+0

Rend deux d'entre nous! – jpaugh

3

Correct. @ BeforeTest/@ AfterTest envelopper une étiquette, pas une méthode de test.