我正在研究TestNG进行更复杂的测试。可能很容易就是我做错了。
我的设置:
我正在使用TestNG运行器在Intellij(最新)中运行测试。我没有使用自定义的testng.xml文件。
A类:不包含实际测试,但仅包含@BeforeSuite(groups="groupA")
和@AfterSuite(groups="groupA")
注释方法,用于设置我想在实际测试类中使用的静态变量。
B类:包含一个@Test(dependsOnGroups = "groupA")
带注释的测试方法。
我的目标:如果已经运行了A类,则只在B类中执行测试。 我的问题:即使我同时运行这两个类,也会跳过B类中的测试。
我的想法:应该在B类测试之前执行@BeforeSuite(groups="groupA")
带注释的方法,所以我想,对groupA
的依赖性会得到满足。
我的问题:似乎没有。为什么呢?
谢谢!
答案 0 :(得分:0)
如果您不使用testng.xml,则无关紧要.IntelliJ为您做到这一点。
我们假设你有:
public class ClassA {
@Test(dependsOnGroups = "groupA")
public void test1(){
System.out.println("test in groupA");
}
}
public class ClassB {
@BeforeSuite(groups = "groupA")
public void beforeSuite() {
System.out.println("before suite in group A");
}
@AfterSuite(groups = "groupA")
public void afterSuite() {
System.out.println("after suite in group A");
}
}
如果你试图运行特定的方法,类或套件,你将失败,因为生成的xml将是:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
<test name="TestNG-Examples">
<classes>
<class name="suite.ClassA">
<methods>
<include name="test1"/>
</methods>
</class> <!-- suite.ClassA -->
</classes>
</test> <!-- TestNG-Examples -->
</suite> <!-- Default Suite -->
但是如果您尝试使用IDE中的运行配置来运行组,则将生成以下xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Custom suite" parallel="none">
<test verbose="1" name="TestNG-Examples">
<groups>
<run>
<include name="groupA"/>
</run>
</groups>
<classes>
<class name="suite.ClassA"/>
<class name="suite.ClassB"/>
</classes>
</test> <!-- TestNG-Examples -->
</suite> <!-- Custom suite -->