如果BeforeSuite没有运行,请跳过测试

时间:2018-03-07 10:13:15

标签: java unit-testing intellij-idea testng

我正在研究TestNG进行更复杂的测试。可能很容易就是我做错了。

我的设置:

我正在使用TestNG运行器在Intellij(最新)中运行测试。我没有使用自定义的testng.xml文件。

A类:不包含实际测试,但仅包含@BeforeSuite(groups="groupA")@AfterSuite(groups="groupA")注释方法,用于设置我想在实际测试类中使用的静态变量。

B类:包含一个@Test(dependsOnGroups = "groupA")带注释的测试方法。

我的目标:如果已经运行了A类,则只在B类中执行测试。 我的问题:即使我同时运行这两个类,也会跳过B类中的测试。

我的想法:应该在B类测试之前执行@BeforeSuite(groups="groupA")带注释的方法,所以我想,对groupA的依赖性会得到满足。

我的问题:似乎没有。为什么呢?

谢谢!

1 个答案:

答案 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 -->