我的项目中有两个单独的包,一个用于集成测试,一个用于单元测试,我的 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()
,这是不预期的。根据官方文档:@BeforeTest
注释的方法将在属于<test>
标记内的类的任何测试方法运行之前运行。
如何配置TestNG和/或IntelliJ以正确运行它?
旁注:虽然我可以beforeIntegrationTests()
通过在调试模式下添加断点或在运行模式下添加 a 来看到正在Thread.sleep
运行,但此方法的输出不会在最终控制台输出中打印。