2010-11-30 3 views
29

J'essaie d'utiliser @BeforeTest pour que le code ... s'exécute une fois avant chaque test.@BeforeTest de TestNg sur une classe de base ne se produisant qu'une seule fois par appareil

Ceci est mon code:

public class TestBase { 
    @BeforeTest 
    public void before() { 
     System.out.println("BeforeTest"); 
    } 
} 

public class TestClass extends TestBase{ 
    @Test 
    public void test1(){} 

    @Test 
    public void test2(){} 
} 

"BeforeTest" est imprimé une fois, pas deux fois. Qu'est-ce que je fais mal?

Répondre

41

Utilisez @BeforeMethod et non @BeforeTest.

La signification de @BeforeTest est expliquée dans the documentation.

3

"BeforeTest" n'est imprimé qu'une fois, pas deux fois. Qu'est-ce que je fais mal?

*** Désolé. Je n'ai pas remarqué que vous avez écrit @BeforeTest, mais dans votre exemple @BeforeTest est presque égal à @BeforeClass, et mieux utiliser @BeforeClass, quand vous n'avez plus de classes de test.

@BeforeClass » doivent être déclarés dans la même classe que vos méthodes d'essai, pas autrement!

//Example 

package test; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.BeforeMethod; 
import org.testng.annotations.Test; 

public class Tests { 
private String bClass; 
private String bMethod1; 
private String bMethod2; 

@BeforeClass 
public void beforeClass() { 
    bClass = "BeforeClass was executed once for this class"; 
} 

@BeforeMethod 
public void beforeMetodTest1() { 
    bMethod1 = "It's before method for test1"; 
} 

@Test 
public void test1() { 
    System.out.println(bClass); 
    System.out.println(bMethod1); 
} 

@BeforeMethod 
public void beforeMethodTest2() { 
    bMethod2 = "It's before method for test2"; 
} 

@Test 
public void test2() { 
    System.out.println(bClass); 
    System.out.println(bMethod2); 
} 
} 

@BeforeClass sera exécutée une fois, avant vos toutes les méthodes de tests dans cette classe. @BeforeMethod sera exécutée avant méthode d'essai

@BeforeClass peut être un seul dans la classe de test, dans la différence @BeforeMethod! (S'il s'agit d'un @BeforeClass, ils sont effectués à tour de rôle, mais ce n'est pas une composition correcte du test)

P.S. Désolé pour mon anglais :)

2

Selon documentation, une méthode annotée avec @BeforeTest est exécutée avant l'exécution de toute méthode @Test appartenant aux classes de la balise.

De mon expérience:

  • Chaque méthode @BeforeTest est exécuté qu'une seule fois
  • Si vous avez plusieurs méthodes @BeforeTest, l'ordre de leur exécution dépend de l'ordre de la classe contenant les méthode @BeforeTest .

Vous pouvez tester cela en configurant un exemple simple.

Questions connexes