我的项目中有两个独立的包,一个用于集成测试,一个用于单元测试,我的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>
标签运行。我如何配置 测试NG 或 IntelliJ 才能正确运行?
侧面说明。 虽然我可以看到 beforeIntegrationTests()
通过在调试模式下添加一个断点或通过在调试模式下添加一个 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
注解。
处理这种情况的理想方法是用 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做进一步的配置。