java - 如何配置 TestNG 以在 IntelliJ 中仅运行单个测试用例?

标签 java intellij-idea testng testng.xml

我的项目中有两个单独的包,一个用于集成测试,一个用于单元测试,我的 testng.xml 如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="All test cases" verbose="1" parallel="classes">
    <test name="Integration Tests">
        <classes>
            <class name="com.sample.integration.ClassC"/>
            <class name="com.sample.integration.ClassD"/>
        </classes>
    </test>
    <test name="Unit tests">
        <classes>
            <class name="com.sample.unit.ClassA"/>
            <class name="com.sample.unit.ClassB"/>
        </classes>
    </test>
</suite>

C类:

public class ClassC {

    @BeforeTest
    public void beforeIntegrationTests() {
        System.out.println("Before Integration tests");
    }

    @Test
    public void classCMethod() {
        System.out.println("Executing class C method");
    }
}

D类:

public class ClassD {

    @Test
    public void classDMethod() {
        System.out.println("Executing class D method");
    }
}

A类:

public class ClassA {

    @BeforeTest
    public void beforeUnitTests() {
        System.out.println("Before unit tests");
    }

    @Test
    public void classAMethod() {
        System.out.println("Executing class A method");
    }
}

B类:

public class ClassB {
    @Test
    public void classBMethod() {
        System.out.println("Executing class B method");
    }
}

如果我运行整个测试套件,它会按预期工作,如下所示:

Before Integration tests
Executing class C method
Executing class D method
Before unit tests
Executing class A method
Executing class B method

但是,如果我尝试运行/调试 classAMethod()来自ClassA ,它运行 beforeUnitTests() [预期] 和 classAMethod() [预期],但它也运行 beforeIntegrationTests()这是没有预料到的。根据official documentation :@BeforeTest :带注释的方法将在属于<test>内的类的任何测试方法之前运行。标签已运行。
如何配置 TestNG 和/或 IntelliJ 才能正确运行?

旁注:虽然我可以看到 beforeIntegrationTests()通过在 Debug模式下添加断点或添加 Thread.sleep 来运行在运行模式下,此方法的输出不会打印在最终控制台输出中。

最佳答案

Firstly, is the expectation valid, as in I expect only beforeUnitTests() and classAMethod() to run if I run just the classAMethod().

不,所有带 @BeforeTest 注释的方法都会在执行带 @Test 注释的方法之前运行。

处理这种情况的理想方法是使用

A类:

public class ClassA {

    @BeforeTest(groups="unitTest")
    public void beforeUnitTests() {
        System.out.println("Before unit tests");
    }

    @Test(groups="unitTest")
    public void classAMethod() {
        System.out.println("Executing class A method");
    }
}

B类:

public class ClassB {
    @Test(groups="unitTest")
    public void classBMethod() {
        System.out.println("Executing class B method");
    }
}

C类:

public class ClassC {

    @BeforeTest(groups="integrationTest")
    public void beforeIntegrationTests() {
        System.out.println("Before Integration tests");
    }

    @Test(groups="integrationTest")
    public void classCMethod() {
        System.out.println("Executing class C method");
    }
}

D类:

public class ClassD {

    @Test(groups="integrationTest")
    public void classDMethod() {
        System.out.println("Executing class D method");
    }
}

testNG XML:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
<suite name="All test cases" verbose="1" parallel="classes">
<groups>
<run>
<include name="unitTest"></include>
</run>
</groups>
    <test name="Test Suite">
        <classes>
            <class name="com.sample.integration.ClassC"/>
            <class name="com.sample.integration.ClassD"/>
            <class name="com.sample.unit.ClassA"/>
            <class name="com.sample.unit.ClassB"/>
        </classes>
    </test>
</suite>

您可以根据需要对此 testNg XML 进行进一步配置。

关于java - 如何配置 TestNG 以在 IntelliJ 中仅运行单个测试用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61715871/

相关文章:

java - 合成方法有什么好处?

java - 在java数组中查找最小/最大数字

java - 与当前类相关的 IntelliJ IDEA 运行配置

java - 如何将对象/参数传递给 Testng

java - 在 testng 中使用 selenium 中的函数时如何保持代码干燥?

java - 线程安全发布者

java - 自定义 ListView Android 的 getView nullPointerException

scala - 已经配置了与 play.api.db.DBApi 的绑定(bind),play-slick 的演变和注入(inject)器错误

java.lang.UnsatisfiedLinkError : no usbJava in java. 库路径

java - 如何在 TestNG 中禁用整个单元测试?