2012-08-28 18 views
10

Czy można wykluczyć klasy z pliku testng.xml?Jak wykluczyć klasę z TestNG?

Próbowałem z

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

ale to daje błąd.

+1

Odpowiedź jest tutaj - http://stackoverflow.com/questions/6209177/how-to-disable-entire-unit-test-in-testng –

+0

@JayBose Wyłączenie nie jest tym samym, co wyłączenie. Gdy test jest wykluczony, nadal można go wykonać w innej konfiguracji. Test wyłączony nie zostanie wykonany dla żadnej konfiguracji. – artdanil

Odpowiedz

6

To powinno działać tak:

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

, więc w obu atrybutach 'name' muszę podać nazwę pakietu – user522170

+0

tak, musisz podać pakiet, który chcesz uruchomić, i ten, którego nie chcesz uruchamiać – Tarken

7

Według TestNG dtd element exclude ma zastosowanie tylko do następujących elementów:

  • pakiet - Opis pakiet wewnątrz listy pakietów.
  • metody - Lista metod do uwzględnienia/wykluczenia z tego testu.
  • run - Podtag grup służących do definiowania grup, które należy uruchomić.

Elementy classes i class nie mogą być bezpośrednio wykluczone; można jednak wykluczyć zajęcia przez grupy:

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

    public void testMethod1() { 
    } 

    public void testMethod2() { 
    } 

} 

Wtedy określić testng.xml:

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

W większości przypadków można zdefiniować, które obejmują zajęcia się do biegu, nie wyklucza, więc po prostu dołącz klasy, które chcesz uruchomić.

0

Nie ma bezpośredniego sposobu na pominięcie klasy testów za pomocą pliku testng.xml. Istnieje jednak obejście, które może zignorować określoną klasę testową.

  1. Zadeklaruj klasę testu jako abstrakt.
  2. Implementacja interfejsu nasłuchującego IAnnotationTransformer i ustawienie enabled = false dla wszystkich metod testowania w określonej klasie oznaczonej niestandardową adnotacją.

Ten sam temat omawiany w grupie TestNG-użytkownika, ale nie ma bezpośredniego odpowiedź skierować wątek Mail - Re: [TestNG-users] Ignoruj ​​klasę w TestNG

1

można użyć classfilesetref i zdefiniować listę klas chcesz uciekać.

<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

Dodaj (groups = { "anyName"}) zaraz po testach nie chcą się uruchomić, więc to będzie wyglądać następująco:

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

I niż w pliku xml dodać tylko po test name="..."

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

Metody z (groups = { "group1"}) nie będą uruchamiane. Ta metoda działa dla mnie. Pamiętaj, że nie może wykluczyć klasy, tylko pakiet, metody i działa. Powodzenia

1

Miałem ten sam problem!W każdym razie, znalazłem rozwiązanie jest przy użyciu klas tagów zamiast pakietów to jest mój plik testng.xml:

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

w tym przypadku, tylko klasa BrmsServicesFactoryTest testy są wykonywane, pozostałe testy klasa nie stracony!

Mam nadzieję, że to może ci pomóc!

0

Jako obejście można dodać grupy pseudo do każdego testu z nazwą, jest równa metody badawczej lub klasę testową poprzez transformator adnotacji

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

}

i używać go w 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>