2012-08-28 14 views
10

¿Es posible excluir clases en testng.xml?¿Cómo excluir una clase en TestNG?

he intentado con

<packages> 
    <package exclude="com.tt.ee"/> 
</packages> 

pero está dando error.

+1

La respuesta está aquí - http://stackoverflow.com/questions/6209177/how-to-disable-entire-unit-test-in-testng –

+0

@JayBose Excluir no es lo mismo que deshabilitar. Cuando se excluye la prueba, aún se puede ejecutar en una configuración diferente. La prueba desactivada no se ejecutará para ninguna configuración. – artdanil

Respuesta

6

Se debe trabajar de esta manera:

<packages> 
    <package name="packageName"> 
     <exclude name="packageYouWantToExclude"></exclude> 
    </package> 
</packages> 
+0

así que en ambos atributos 'nombre' necesito dar el nombre del paquete – user522170

+0

, sí necesita dar el paquete que desea ejecutar y el que no desea ejecutar – Tarken

7

De acuerdo con la TestNG dtd, el elemento exclude sólo es aplicable a los siguientes elementos:

  • paquete - La descripción del paquete dentro de la lista de paquetes.
  • métodos - La lista de métodos para incluir/excluir de esta prueba.
  • ejecución - La subetiqueta de los grupos utilizados para definir qué grupos se deben ejecutar.

Los elementos classes y class no se pueden excluir directamente; Sin embargo, puede excluir clases a través de grupos:

@Test(groups = { "ClassTest1" }) 
public class Test1 { 

    public void testMethod1() { 
    } 

    public void testMethod2() { 
    } 

} 

A continuación se definirá el testng.xml:

<suite> 
    <test> 
    <groups> 
     <run> 
     <exclude name="ClassTest1"/> 
     </run> 
    </groups> 
    <classes> 
     <class name="Test1"> 
    </classes> 
    </test> 
</suite> 

En la mayoría de los casos se definen, categorías que incluyen a la carrera, no excluir, así que solo incluya las clases que desea ejecutar.

0

No hay forma directa de omitir la clase de prueba mediante testng.xml. Sin embargo, hay una solución que puede utilizarse para ignorar una clase de prueba en particular.

  1. Declara la clase de prueba como abstracta.
  2. Implemente IAnnotationTransformer interfaz de escucha y establezca enabled = false para todos los métodos de prueba en una clase particular marcada con su anotación personalizada.

El mismo tema discutido en el grupo TestNG-usuario, pero hay una respuesta directa se refiere el hilo electrónico - Re: [TestNG usuarios] Ignorar una clase en TestNG

1

Usted podría utilizar classfilesetref y definir la lista de clases quieres correr

<fileset id="test.classes" dir="${test.classes.dir}" casesensitive="yes"> 
    <exclude name="**/ExcludeClass.java" /> 
</fileset> 

<testng [...]> 
    <!-- your setting here --> 
    <classfilesetref refid="test.classes"/> 
</testng> 
1

Añadir (groups = { "anyName"}) justo después de las pruebas de que no desee ejecutar, por lo que se ve como:

@Test(groups = { "group1"}) 
public void methodTestName(){.. 
} 

Y que en su archivo XML añadir justo después test name="..."

<groups> 
     <run> 
      <exclude name="group1" /> 
     </run> 
    </groups> 

Los métodos con (groups = { "group1"}) no se ejecutarán. De esta manera me funciona. Recuerde que no puede excluir Class, only package, methods y ejecuta. Buena suerte

1

¡Tuve el mismo problema!De todos modos, la solución que he encontrado es utilizando las clases de etiquetas en lugar de paquetes de esto es mi archivo testng.xml:

<classes> 
     <class name="brms.impl.BrmsServicesFactoryTest" /> 
<!--   <class name="brms.impl.ServicesFactoryTest" /> --> 
    </classes> 

en este caso, sólo la clase se ejecutan pruebas BrmsServicesFactoryTest, las otras pruebas de clase no ejecutados!

¡Espero que esto pueda ayudarlo!

0

Como solución, puede agregar grupos seudo a la prueba con cada nombre, es igual método de prueba o una clase de prueba a través del transformador de anotación

public class TestNGAnnotationTransformer implements IAnnotationTransformer { 

@Override 
public void transform(ITestAnnotation annotation, Class testClass, Constructor testConstructor, Method testMethod) { 
    if (testMethod == null || annotation == null) { 
     return; 
    } 

    String pseudoGroupClass = testMethod.getDeclaringClass().getSimpleName(); 
    String pseudoGroupMethod = pseudoGroupClass + "." + testMethod.getName(); 

    String[] existingGroups = annotation.getGroups(); 
    String[] extendedGroups; 
    if (existingGroups == null) { 
     extendedGroups = new String[] { pseudoGroupClass, pseudoGroupMethod }; 
    } else { 
     List<String> tmp = new ArrayList<String>(); 
     for (String group : existingGroups) { 
      tmp.add(group); 
     } 
     tmp.add(pseudoGroupClass); 
     tmp.add(pseudoGroupMethod); 
     extendedGroups = tmp.toArray(new String[0]); 
    } 

    annotation.setGroups(extendedGroups); 
} 

}

y utilizarlo en su testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 

<suite name="My tests"> 
    <test name="tests" enabled="true"> 
     <groups> 
      <run> 
       <include name="My Group"/> 
       <include name="MySuperClass"/> 
       <exclude name="MySuperClass.badMethod"/> 
       <exclude name="DontLikeThisClassAnymore"/> 
      </run> 
     </groups> 

     <packages> 
      <package name="com.mycompany.*"/> 
     </packages> 
    </test> 

    <listeners> 
     <listener class-name="com.mycompany.TestNGAnnotationTransformer"/> 
    </listeners> 
</suite> 
Cuestiones relacionadas