2011-10-29 34 views
8

Me pregunto acerca del uso de @BeforeMethod con grupos. En http://testng.org/javadoc/org/testng/annotations/BeforeMethod.html dice:TestNG BeforeMethod con grupos

alwaysRun: Si se establece en verdadero, este método de configuración se ejecutará independientemente de los grupos a los que pertenece.

así que tengo la clase siguiente:

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(); 
    } 
} 
} 

que da salida:

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

Aparte del hecho de que creo awaysRun es false por defecto, puede alguien explicarme por qué tanto antes los métodos se llaman antes de cada prueba, sin tener en cuenta los grupos? Algo como @Test (skipBeforeMethod = "setUpG1") también funcionaría.

Estoy usando IntelliJ IDEA CE 10.5.2. Lo he ejecutado con gradle 1.0-milestone-3, también.

Respuesta

2

¿Cómo invoca TestNG? ¿Estás ejecutando algún grupo?

Si no ejecuta ninguno, se ejecutará @BeforeMethods. Si ejecuta "g1", solo se ejecutará setupG1, etc. ...

+0

No ejecuto ninguno, la agrupación de pensamientos es un tipo de filtrado, por lo que el método before con un cierto grupo solo se aplica a las pruebas con el mismo grupo. Supongo que estaba equivocado. Lo que tengo que hacer es algo así como su solución aquí (http://stackoverflow.com/questions/3115822/passing-output-of-one-test-method-to-another-method-testng), pero el problema con eso La solución es que mResult no se restablece si hay muchas pruebas según f1. – rweng

0

Recomendaría no usar alwaysRun = true, pero cree un grupo especial para los métodos de configuración (usamos "config"), y anote todo antes *() y después de *() métodos con groups = "config".

Todos los métodos de prueba se pueden anotar con el grupo que desee, p. "foo" y "bar".

Luego, en su carrera, trata de:

-Dgroups=config,foo 

o

-Dgroups=config,bar 

Si a continuación, agregar otro grupo, "newgroup", que no tienen que pasar por todo el config métodos y añaden "newgroup" a ellos, que acaba de ejecutar:

-Dgroups=config,newGroup 

Esto hace que la gestión de los grupos de manera más fácil!

Si (por error?) Ejecutó algo como:

-Dgroups=config,nonExistingGroup 

No hay pruebas (y no hay métodos de configuración) funcionaría ya que en realidad no tiene ninguna prueba anotados para "nonExistingGroup" ya los métodos de configuración única ejecutar si hay "pruebas de coincidencia" que requieren esos métodos de configuración para ejecutarse.

Cuestiones relacionadas