2010-11-30 6 views
29

Ich versuche @BeforeTest zu verwenden, um Code zu bekommen ... einmal vor jedem Test zu laufen.TestNgs @BeforeTest auf der Basisklasse passiert nur einmal pro Fixture

Dies ist mein 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" wird nur einmal gedruckt, nicht zweimal. Was mache ich falsch?

Antwort

41

Verwenden Sie @BeforeMethod, nicht @BeforeTest. Die Bedeutung von @BeforeTest wird unter the documentation erläutert.

3

"BeforeTest" wird nur einmal gedruckt, nicht zweimal. Was mache ich falsch?

*** Entschuldigung. Ich habe nicht bemerkt, dass du @BeforeTest geschrieben hast, aber in deinem Beispiel ist @BeforeTest fast gleich @BeforeClass und besser @BeforeClass, wenn du keine Test-Klassen mehr hast.

@BeforeClass“sollte in derselben Klasse deklariert werden, die Ihre Tests Methoden, nicht anders!

//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 einmal ausgeführt wird, bevor Ihr alle Tests Methoden in dieser Klasse. @BeforeMethod vor Testmethode ausgeführt wird

@BeforeClass kann nur eine in der Testklasse sein, im Unterschied @BeforeMethod! (Wenn es @BeforeClass ist, werden sie abwechselnd ausgeführt, aber es ist keine korrekte Zusammensetzung des Tests)

P.S. Entschuldigung für mein Englisch :)

2

Gemäß documentation wird eine mit @BeforeTest annotierte Methode ausgeführt, bevor eine beliebige @Test-Methode ausgeführt wird, die zu den Klassen innerhalb des Tags gehört.

Aus meiner Erfahrung:

  • Jede @BeforeTest Methode nur einmal ausgeführt wird
  • Wenn Sie mehrere @BeforeTest Methoden haben, hängt die Reihenfolge ihrer Ausführung in der Größenordnung der Klasse jene @BeforeTest Verfahren enthält .

Sie könnten dies testen, indem Sie ein einfaches Beispiel einrichten.

Verwandte Themen