2015-06-02 11 views
15
As we know from official TestNG documentation: 

@BeforeClass: Opatrzony uwagami metoda zostanie uruchomiona przed pierwszym metody badania w bieżącej klasy jest wywoływany.Różnica między BeforeClass i BeforeTest w TestNG

@BeforeTest: Metoda z adnotacjami zostanie uruchomiona przed uruchomieniem dowolnej metody testowej należącej do klas wewnątrz znacznika <test>.

Obie powyższe adnotacje testowania mają podobną funkcjonalność. Jednak powinna istnieć wyjątkowa różnica w funkcji. Czy ktoś może to podkreślić?

+0

Raz na klasę vs raz na kasetę, możesz mieć kilka przypadków testowych w jednej klasie? – Dude

+0

Obie adnotacje użyte do inicjacji przed wykonaniem wszystkich testcases. To jest podobieństwo. Coś wyjątkowego poza tym? –

+0

masz 1 testklasę, z 3 metodami testowymi: '@ BeforeClass' zostanie wykonany raz,' @ BeforeTest' zostanie wykonany 3 razy. to różnica. '@ BeforeClass' może być użyty do ustawienia środowiska testowego,' @ BeforeTest' może być użyty do czyszczenia danych lub danych konfiguracyjnych itp ... – Dude

Odpowiedz

55

SeleniumAbstractTest.class

public abstract class SeleniumAbstractTest { 

    @BeforeSuite 
    public void beforeSuite() { 
    System.out.println("BeforeSuite"); 
    } 

    @BeforeTest 
    public void beforeTest() { 
    System.out.println("BeforeTest"); 
    } 

    @BeforeClass 
    public void beforeClass() { 
    System.out.println("BeforeClass"); 
    } 

    @BeforeMethod 
    public void beforeMethod() { 
    System.out.println("BeforeMethod"); 
    } 

    @AfterMethod 
    public void afterMethod() { 
    System.out.println("AfterMethod"); 
    } 

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

    @AfterTest 
    public void afterTest() { 
    System.out.println("AfterTest"); 
    } 

    @AfterSuite 
    public void afterSuite() { 
    System.out.println("AfterSuite"); 
    } 

} 

MyTestClass1.class

public class MyTestClass1 extends SeleniumAbstractTest { 

    @Test 
    public void myTestMethod1() { 
    System.out.println("myTestMethod1"); 
    } 

    @Test 
    public void myTestMethod2() { 
    System.out.println("myTestMethod2"); 
    } 
} 

MyTestClass2.class

public class MyTestClass2 extends SeleniumAbstractTest { 

    @Test 
    public void myTestMethod3() { 
    System.out.println("myTestMethod3"); 
    } 

    @Test 
    public void myTestMethod4() { 
    System.out.println("myTestMethod4"); 
    } 
} 

Jeśli masz następujący test Suite ...

<suite name="Suite"> 
    <test name="Test1" > 
    <classes> 
     <class name="MyTestClass2" /> 
    </classes> 
    </test> 

    <test name="Test2"> 
    <classes> 
     <class name="MyTestClass1"/> 
     <class name="MyTestClass2"/> 
    </classes> 
    </test> 
</suite> 

... wtedy wyjście będzie

BeforeSuite 
BeforeTest 
BeforeClass 
BeforeMethod 
myTestMethod3 
AfterMethod 
BeforeMethod 
myTestMethod4 
AfterMethod 
AfterClass 
AfterTest 
BeforeTest 
BeforeClass 
BeforeMethod 
myTestMethod1 
AfterMethod 
BeforeMethod 
myTestMethod2 
AfterMethod 
AfterClass 
BeforeClass 
BeforeMethod 
myTestMethod3 
AfterMethod 
BeforeMethod 
myTestMethod4 
AfterMethod 
AfterClass 
AfterTest 
AfterSuite 

Nadzieja to pomaga :)

+0

Bardzo bardzo jednoznaczna odpowiedź :) Dzięki! Mam nadzieję, że to pomaga wielu .... –

1

jeśli wystają z innej klasy to są wyniki:

parentTest - BeforeTest- parent  
testClass1 - BeforeTest- test1  
parentTest - BeforeClass- parent  
testClass1 - BeforeClass- test1  
parentTest - BeforeMethod- parent  
testClass1 - BeforeMethod- test1  
testClass1 - myTestMethod1  
testClass1 - AfterMethod- test1  
parentTest - AfterMethod- parent  
parentTest - BeforeMethod- parent  
testClass1 - BeforeMethod- test1  
testClass1 - myTestMethod2  
testClass1 - AfterMethod- test1  
parentTest - AfterMethod- parent 
testClass1 - AfterClass- test1  
parentTest - AfterClass- parent 
testClass1 - AfterTest- test1 
parentTest – AfterTest- parent 
1

Moje opinie:

@BeforeClass: Metoda z adnotacjami zostanie uruchomiona przed pierwszą metodą testową w obecnej klasie jest wywoływana

@BeforeTest: Opatrzony uwagami metoda zostanie uruchomione przed jakąkolwiek metodą badania w bieżącym pakietu jest prowadzony

4

@BeforeMethod - wykonywany przed każdym metody badawczej np Metoda, która używa adnotacji @Test

@BeforeTest - wykonuje się tylko przed tagiem podanym w pliku testng.xml.

W skrócie, @BeforeMethod działa na testach zdefiniowanych w klasach Java. A @BeforeTest działa w teście zdefiniowanym w pliku testng.xml, tj. XML.

Powiązane problemy