[英]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.