繁体   English   中英

如何配置 TestNG 在 IntelliJ 中只运行一个测试用例?

[英]How to configure TestNG to run just a single test case in IntelliJ?

我的项目中有两个单独的包,一个用于集成测试,一个用于单元测试,我的 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>

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

Class D:

public class ClassD {

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

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

Class 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

但是,如果我尝试仅从ClassA运行/调试classAMethod() ,它会运行beforeUnitTests() [预期] 和classAMethod() [预期],但是它也会运行beforeIntegrationTests() ,这不是预期的。 根据官方文档@BeforeTest :带注释的方法将在属于<test>标记内的类的任何测试方法运行之前运行。
如何配置TestNG和/或IntelliJ以正确运行它?

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

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

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

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

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

Class B:

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

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

Class 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 进行进一步配置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM