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

问题描述 投票:0回答:1

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

然而,如果我试着只运行rundebug的话 classAMethod()ClassA,它运行 beforeUnitTests() [预期] 和 classAMethod() [预期],但它也运行 beforeIntegrationTests() 也就是 不料. 根据 公文: @BeforeTest: 注释的方法将在属于该类的任何测试方法之前运行。<test> 标签运行。我如何配置 测试NGIntelliJ 才能正确运行?

侧面说明。 虽然我可以看到 beforeIntegrationTests() 通过在调试模式下添加一个断点或通过在调试模式下添加一个 Thread.sleep 在运行模式下,这个方法的输出没有被打印在最终的控制台输出中。

java intellij-idea testng testng.xml
1个回答
0
投票
Firstly, is the expectation valid, as in I expect only beforeUnitTests() and classAMethod() to run if I run just the classAMethod().

不,所有的方法都带有 @BeforeTest 注解将在执行带有 @Test 注解。

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

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做进一步的配置。

© www.soinside.com 2019 - 2024. All rights reserved.