Как исключить класс в TestNG?

Можно ли исключить классы в testng.xml?

Я пробовал с помощью

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

но он дает ошибку.

Ответ 1

В соответствии с TestNG dtd элемент exclude применим только к следующим элементам:

  • package - описание пакета в списке пакетов.
  • methods - список методов для включения/исключения из этого теста.
  • run - subtag групп, используемых для определения групп, которые должны выполняться.

Элементы classes и class не могут быть напрямую исключены; однако вы можете исключить классы через группы:

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

  public void testMethod1() {
  }

  public void testMethod2() {
  }

}

Затем вы определите testng.xml:

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

В большинстве случаев вы определяете, какие классы включать для запуска, а не исключать, поэтому просто включайте классы, которые вы хотите запустить.

Ответ 2

Это работает так:

<packages>
    <package name="some.package">
        <exclude name="some.package.to.exclude"></exclude>
    </package>
</packages>

В атрибутах name укажите имена пакетов.

Примечание. В TestNG 6.14.3 нельзя исключать классы из <classes> XML.

Ответ 3

Добавьте (groups = { "anyName"}) сразу после тестов, которые вы не хотите запускать, поэтому он будет выглядеть так:

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

И чем в xml файле добавить только после test name="..."

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

Методы с (groups = { "group1"}) не будут запущены. Этот способ работает для меня. Помните, что не может исключать класс, только пакет, методы и запускает. Удачи.

Ответ 4

Нет прямого способа пропустить тестовый класс, хотя testng.xml. Однако есть обходное решение, которое может использоваться для игнорирования конкретного тестового класса.

  • Объявить тестовый класс абстрактным.
  • Внедрите интерфейс прослушивателя IAnnotationTransformer и установите enabled = false для всех методов тестирования в определенном классе, помеченном вашей пользовательской аннотацией.

Те же темы, обсуждаемые в группе testng-user, но прямой ответ не ссылаются на поток почты - Re: [testng-users] Игнорировать класс в testng

Ответ 5

Вы можете использовать classfilesetref и определить список классов, которые хотите запустить.

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

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

Ответ 6

У меня была такая же проблема! Во всяком случае, решение, которое я нашел, использует классы тегов вместо пакетов, это мой файл testng.xml:

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

в этом случае выполняются только тесты класса BrmsServicesFactoryTest, другие тесты класса не выполняются!

Надеюсь, это поможет вам!

Ответ 7

В качестве обходного пути вы можете добавлять псевдогруппы к каждому тесту с именем, равным методу тестирования или классу тестов через аннотационный трансформатор

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

}

и использовать его в 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>

Ответ 8

Если вы используете xml файл (testng.xml) для определения набора и, начиная с TestNG 6.14.3, вы не можете исключать классы в теге XML, способ исключения определенного класса внутри пакета заключается в следующем:

<suite name="suite-name" >
<test name="test-name">
    <packages>
        <package name="ab.cd.ef.*"/>
    </packages>
    <classes>
        <class
            name="ab.cd.ef.ClassToBeExcluded">
            <methods>
                <exclude name=".*" />
            </methods>
        </class>
    </classes>
</test>

По сути, вместо исключения класса (dtd не позволяет) все методы класса исключаются.