1

如何testNG通过代码运行指定的案例?以下代码:

public class TestNGTest {

    @Test
    public void test() {
        System.out.println("test  ########");
    }

    @Test
    public void test2() {
        System.out.println("test2 ************");
    }

    public static void main(String[] args) throws Exception {
        TestNG testSuite = new TestNG();

        testSuite.setTestClasses(new Class[] { TestNGTest.class });
        testSuite.setDefaultSuiteName("setDefaultSuiteName");
        testSuite.setDefaultTestName("setDefaultTestName");
        testSuite.run();
    }
}

这将运行两个测试用例。如何专门运行“test2”?

预期输出:

test2 ************
4

2 回答 2

1

您可以使用带有前缀的类Xml来实现此目的:

XmlClass xmlClass = new XmlClass(TestNGTest.class.getName());
// now mention the methods to be included. You may use setExcludedMethods depending on the requirement.
XmlInclude method = new XmlInclude("test2");
xmlClass.setIncludedMethods(List.of(method));
// or xmlClass.setExcludedMethods(List.of("test"));

现在创建 xml 套件和 xml 测试:

XmlSuite suite = new XmlSuite();
suite.setName("suite");

XmlTest test = new XmlTest(suite);
// internally, the test method is also added to the suite object
test.setName("sample");
test.setXmlClasses(List.of(xmlClass));

最终创建TestNG对象:

TestNG t = new TestNG();
t.setXmlSuites(List.of(suite));
t.run();

注意: List.of是仅在 java 9 或更高版本中可用的方法。如果您使用的是较低版本,那么您可以使用java.util.Arrays.asList

于 2021-12-13T15:07:05.630 回答
0

您可以通过添加这样的方法拦截器来做到这一点:

public class TestNGTest implements IMethodInterceptor {

    @Test
    public void test() {

        System.out.println("test  ########");
    }

    @Test
    public void test2() {

        System.out.println("test2 ************");
    }

    public static void main(String[] args) throws Exception {
        TestNG testSuite = new TestNG();

        testSuite.setTestClasses(new Class[] { TestNGTest.class });
        testSuite.setMethodInterceptor(new TestNGTest());
        testSuite.setDefaultSuiteName("setDefaultSuiteName");
        testSuite.setDefaultTestName("setDefaultTestName");
        testSuite.run();
    }

    @Override
    public List<IMethodInstance> intercept(List<IMethodInstance> methods, ITestContext context) {
        return methods
                .stream()
                .filter(iMethodInstance -> "test2".equals(iMethodInstance.getMethod().getMethodName()))
                .collect(Collectors.toList());
    }
}
于 2021-12-13T15:20:04.310 回答