2011-10-29 4 views
8

Mi chiedo sull'utilizzo di @BeforeMethod con i gruppi. In http://testng.org/javadoc/org/testng/annotations/BeforeMethod.html è indicato:TestNG BeforeMethod con gruppi

alwaysRun: se impostato su true, questo metodo di configurazione verrà eseguito indipendentemente dai gruppi a cui appartiene.

così ho la seguente classe:

public class BeforeTest { 
private static final Logger LOG = Logger.getLogger(BeforeTest.class); 
@BeforeMethod(groups = {"g1"}, alwaysRun = false) 
public void setUpG1(){ 
    sleep(); 
    LOG.info("BeforeMethod G1"); 
} 

@Test(groups = {"g1"}) 
public void g1Test(){ 
    sleep(); 
    LOG.info("g1Test()"); 
} 

@BeforeMethod(groups = {"g2"}, alwaysRun = false) 
public void setUpG2(){ 
    sleep(); 
    LOG.info("BeforeMethod G2"); 
} 

@Test(groups = {"g2"}) 
public void g2Test(){ 
    sleep(); 
    LOG.info("g2Test()"); 
} 


private void sleep(){ 
    try { 
     Thread.sleep(500); 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 
} 

quali uscite:

BeforeMethod G1 
BeforeMethod G2 
g1Test() 
BeforeMethod G1 
BeforeMethod G2 
g2Test() 

A parte il fatto che credo awaysRun è false per impostazione predefinita, chiunque può spiegarmi perché sia ​​prima i metodi vengono chiamati prima di ogni test, ignorando i gruppi? Funzionerebbe anche come @Test (skipBeforeMethod = "setUpG1").

Sto usando IntelliJ IDEA CE 10.5.2. L'ho eseguito anche con gradle 1.0-milestone-3.

risposta

2

Come stai invocando TestNG? Stai facendo gruppi?

Se non si esegue nessuno, verranno eseguiti entrambi i metodi @BeforeMethods. Se si esegue "g1", verrà eseguito solo setupG1, ecc ...

+0

Non eseguo nessuno, il raggruppamento pensato è una sorta di filtro in modo che il metodo beforeMethod con un determinato gruppo si applichi solo ai test con lo stesso gruppo. Credo di aver sbagliato. Quello che devo fare è qualcosa come la tua soluzione qui (http://stackoverflow.com/questions/3115822/passing-output-of-one-test-method-to-another-method-testng), ma il problema con quello la soluzione è che mResult non viene resettato se ci sono molti test a seconda di f1. – rweng

0

Si consiglia di non utilizzare alwaysRun = true, ma creare un gruppo speciale per i metodi di configurazione (usiamo "config") e annotare tutto prima *() e dopo i metodi *() con groups = "config".

Tutti i metodi di prova possono essere annotati con qualunque gruppo desideri, ad es. "foo" e "bar".

Poi, in corsa, si fa:

-Dgroups=config,foo 

o

-Dgroups=config,bar 

Se poi si aggiunge un altro gruppo, "newGroup", è non c'è bisogno di passare attraverso tutti i config metodi e aggiungere "newGroup" a loro, è sufficiente eseguire:

-Dgroups=config,newGroup 

Ciò semplifica la gestione dei gruppi!

Se (per errore?) Eseguito qualcosa di simile:

-Dgroups=config,nonExistingGroup 

Nessun test (e nessun metodo di configurazione) si porrebbe come in realtà non ha alcun test annotati per "nonExistingGroup" e ai metodi di configurazione solo eseguire se ci sono "test di corrispondenza" che richiedono l'esecuzione di quei metodi di configurazione.