2012-08-28 8 views
10

Ist es möglich, Klassen in testng.xml auszuschließen?Wie Klasse in TestNG ausschließen?

Ich habe versucht, mit

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

aber es gibt Fehler.

+1

Die Antwort ist hier - http://stackoverflow.com/questions/6209177/how-to-disable-entire-unit-test-in-testng –

+0

@JayBose Excluding ist nicht das gleiche wie deaktivieren. Wenn der Test ausgeschlossen ist, kann er immer noch in einer anderen Konfiguration ausgeführt werden. Deaktivierter Test wird für keine Konfiguration ausgeführt. – artdanil

Antwort

6

Es sollte so funktionieren:

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

also in beiden 'name' Attribut muss ich Paketnamen geben – user522170

+0

yeah Sie müssen das Paket, das Sie ausführen möchten und das, das Sie nicht ausführen möchten – Tarken

7

Nach dem TestNG dtd, das exclude Element ist nur für die folgenden Elemente:

  • Paket - Die Paketbeschreibung in Paketen Liste.
  • Methoden - Die Liste der Methoden, die von diesem Test eingeschlossen/ausgeschlossen werden sollen.
  • run - Das Untertag der Gruppen, die verwendet werden, um zu definieren, welche Gruppen ausgeführt werden sollen.

Die Elemente classes und class können nicht direkt ausgeschlossen werden;

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

    public void testMethod1() { 
    } 

    public void testMethod2() { 
    } 

} 

Dann definieren Sie die testng.xml: Sie jedoch Klassen durch Gruppen ausschließen

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

In den meisten Fällen Sie definieren, die Klassen für den Lauf zu schließen, nicht auszuschließen, Fügen Sie also nur die Klassen ein, die Sie ausführen möchten.

0

Es gibt keine direkte Möglichkeit, die Testklasse zu überspringen, obwohl die Datei testng.xml vorhanden ist. Es gibt jedoch eine Problemumgehung, mit der bestimmte Testklassen ignoriert werden können.

  1. Erklären Sie die Testklasse als abstrakt.
  2. Implementieren Sie die IAnnotationTransformer-Listenerschnittstelle, und setzen Sie enabled = false für alle Testmethoden in einer bestimmten Klasse, die mit Ihrer benutzerdefinierten Anmerkung markiert ist.

Das gleiche Thema in testng-Benutzergruppe diskutiert, aber keine direkte Antwort des Mail-Thread verweisen - Re: [testng-users] eine Klasse in testng Ignorieren

1

Sie classfilesetref nutzen könnten und die Liste der Klassen definieren du willst laufen.

<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

hinzufügen (groups = { "anyName"}) direkt nach Tests, die Sie nicht wollen, laufen, so wird es aussehen werden:

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

Und als in Ihrem XML-Datei fügen Sie einfach nach test name="..."

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

Methoden mit (groups = { "group1"}) werden nicht ausgeführt. Dieser Weg funktioniert für mich. Denken Sie daran, dass Sie nicht Klasse, nur Paket, Methoden und ausführen können. Viel Glück

1

Ich hatte das gleiche Problem!Wie auch immer, die Lösung, die ich gefunden, den Tag wird mit Klassen statt Paketen dies ist meine testng.xml Datei:

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

in diesem Fall nur die Klasse BrmsServicesFactoryTest Tests ausgeführt werden, die anderen Tests, Klassenarbeiten nicht ausgeführt!

Ich hoffe, das könnte Ihnen helfen!

0

Als Abhilfe können Sie Pseudo-Gruppen zu den einzelnen Test mit Name, gleich Testmethode oder Testklasse über Annotation Transformator

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

}

und verwenden Sie es in Ihrem 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>