La respuesta es a través de una costumbre org.testng.IMethodSelector:
Its includeMethod() puede excluir cualquier método que deseemos, como un método público no anotado.
Sin embargo, para registrar un encargo de Java MethodSelector, debe agregarlo a la instancia PruebaXml administrado por cualquier TestRunner, lo que significa que necesita su propio encargo TestRunner.
Pero, para construir un TestRunner personalizada, es necesario registrar una TestRunnerFactory, a través de la opción -testrunfactory.
PERO NUNCA -testrunfactory que se toma en cuenta por TestNG clase ... lo que es necesario también definir una clase personalizada TestNG: Método
- con el fin de anular la configuración (Mapa),
- , porque se puede ajustar la TestRunnerFactory
- TestRunnerFactory que se puede construir un TestRunner encargo,
- TestRunner que se establece en la instancia PruebaXml un XMLMethodSelector encargo
- XMLMethodSelector que creará un IMethodSelector personalizado
- IMethodSelector que excluirá los métodos TestNG que elija.
Ok ... es una pesadilla. Pero también es un desafío de código, por lo que debe ser un poco desafiante;)
Todo el código está disponible en DZone snippets.
Como es habitual para un desafío código:
- una clase de Java (y algunas clases bastantes interiores)
- copiar y pegar la clase en un directorio 'fuente/test' (ya que el paquete es " prueba ')
- ejecutarlo (no hay argumentos necesarios)
actualización de Mike Stone:
Voy a aceptar esto porque suena bastante parecido a lo que terminé haciendo, pero pensé que agregaría lo que hice también.
Básicamente, creé una anotación de grupos que se comporta como la propiedad de grupos de la prueba (y otras) anotaciones.
Luego, creé un GroupAnnotationTransformer, que utiliza IAnnotationTransformer para ver todas las pruebas y clases de prueba que se están definiendo, luego modifica la prueba para agregar los grupos, que funciona perfectamente con la exclusión e inclusión de grupos.
Modifique la construcción para usar el nuevo transformador de anotación, ¡y todo funciona perfectamente!
Bueno ... la única advertencia es que no agrega los grupos a los métodos que no son de prueba ... porque en el momento en que hice esto, había otro transformador de anotación que te permite transformar CUALQUIER COSA, pero de alguna manera no estaba incluido en el TestNG que estaba usando por alguna razón ... así que es una buena idea hacer sus métodos antes/después anotados para alwaysRun = true ... que es suficiente para mí.
El resultado final es que puedo hacer:
@Groups({ "myGroup1", "myGroup2"})
public class MyTestCase {
@Test
@Groups("aMethodLevelGroup")
public void myTest() {
}
}
y he hecho el trabajo transformador con la subclasificación y todo.
Acaba de agregar una posible solución a su problema TestNG 'group-wide group'. ¿Podrías echarle un vistazo y decirme si va en la dirección correcta? – VonC