【问题标题】:Skip test if BeforeSuite did not run如果 BeforeSuite 没有运行则跳过测试
【发布时间】:2018-08-15 09:36:12
【问题描述】:

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

我的设置:

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

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

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

我的目标:仅在 A 类也已运行的情况下才在 B 类中执行测试。 我的问题:即使我同时运行两个类,B 类中的测试也会被跳过。

我的想法:@BeforeSuite(groups="groupA")注解的方法应该在B类测试之前执行,所以我想,对groupA的依赖就可以满足了。

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

谢谢!

【问题讨论】:

    标签: java unit-testing intellij-idea testng


    【解决方案1】:

    不用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 -->
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-08
      • 2015-08-09
      • 1970-01-01
      相关资源
      最近更新 更多