16

这可以排除 testng.xml 中的类吗?

我试过了

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

但它给出了错误。

4

8 回答 8

10

根据TestNG dtd,该exclude元素仅适用于以下元素:

  • 包 - 包列表中的包描述。
  • 方法 - 包含/排除此测试的方法列表。
  • run - 组的子标签,用于定义应该运行哪些组。

元素classesclass不能直接排除;但是,您可以通过组排除类:

@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>

在大多数情况下,您定义了要包含哪些类来运行,而不是排除哪些类,因此只需包含您要运行的类。

于 2012-08-29T06:06:15.150 回答
8

它是这样工作的:

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

name属性中,提供包名称。

注意:在 TestNG 6.14.3 中,您不能<classes>在XML 标记中排除类。

于 2012-08-28T11:05:06.007 回答
6

如果您使用 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 不允许),而是排除类的所有方法。

于 2019-03-27T10:17:57.623 回答
2

(groups = { "anyName"})在您不想运行的测试之后立即添加,所以它看起来像:

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

而不是在您的xml 文件中添加之后 test name="..."

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

(groups = { "group1"})不会运行的方法。这种方式对我有用。请记住,您不能排除 Class,只能排除包、方法和运行。祝你好运

于 2014-12-01T11:07:59.013 回答
1

通过 testng.xml 没有直接的方法可以跳过测试类。但是,有一些解决方法可以用来忽略特定的测试类。

  1. 将测试类声明为抽象类。
  2. 实现 IAnnotationTransformer 侦听器接口并将 enabled = false 设置为标有自定义注释的特定类中的所有测试方法。

testng-user 组中讨论的相同主题但没有直接答案参考邮件线程 - Re: [testng-users] Ignore a class in testng

于 2014-07-06T18:48:17.870 回答
1

您可以使用 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>
于 2014-10-14T17:47:53.357 回答
1

我遇到过同样的问题 !无论如何,我找到的解决方案是使用标记类而不是包这是我的 testng.xml 文件:

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

在这种情况下,只执行类 BrmsServicesFactoryTest 测试,不执行其他类测试!

我希望这可以帮助你!

于 2015-03-30T11:18:39.110 回答
0

作为解决方法,您可以通过注释转换器将伪组添加到具有名称、等于测试方法或测试类的每个测试

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>
于 2017-04-18T06:54:05.117 回答