如果@BeforeMethod失败,则高达6.10的TestNG会忽略套件中的后续类

时间:2017-08-03 12:53:19

标签: java unit-testing testng

考虑以下 TestNG 套件:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "TestNG Examples" parallel = "false" thread-count = "1">
    <test name = "TestNG Examples">
        <classes>
            <class name = "com.example.A"/>
            <class name = "com.example.B"/>
        </classes>
    </test>
</suite>

由这些类组成:

package com.example;

import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public final class A extends AbstractTest {
    @BeforeMethod
    public void setUp() {
        throw new RuntimeException();
    }

    @Test
    public void test() {
    }
}

package com.example;

import org.testng.annotations.Test;

public final class B extends AbstractTest {
    @Test
    public void test() {
        System.out.println("B.test()");
    }
}

请注意B.test()A.test()之后执行,并且这两个类都有一个共同的超类:

package com.example;

import org.testng.annotations.AfterMethod;

public abstract class AbstractTest {
    @AfterMethod
    public final void tearDown() {
    }
}

现在,如果@BeforeMethod中的A挂钩由于某种原因失败(如上例所示),则永远不会运行扩展相同超类(AbstractTest)的后续套件类:

TestNG Eclipse plug-in

这是 Eclipse 的屏幕截图,但我也在 IntelliJ IDEA TeamCity 中观察到相同的行为。

必须满足以下先决条件才能重现此问题:

  • 两个测试都应该有一个共同的祖先。
  • 共同的祖先应该有一个@AfterMethod钩子。
  • 正在运行的第一个测试类应该有一个失败的@BeforeMethod挂钩。

这是预期的行为吗? 是否记录在哪里?

1 个答案:

答案 0 :(得分:2)

在这里检查alwaysRun http://testng.org/doc/documentation-main.html

如果我们想要运行方法,即使依赖方法失败,那么使用alwaysRun = true