考虑以下 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
)的后续套件类:
这是 Eclipse 的屏幕截图,但我也在 IntelliJ IDEA 和 TeamCity 中观察到相同的行为。
必须满足以下先决条件才能重现此问题:
@AfterMethod
钩子。@BeforeMethod
挂钩。这是预期的行为吗? 是否记录在哪里?
答案 0 :(得分:2)
在这里检查alwaysRun http://testng.org/doc/documentation-main.html。
如果我们想要运行方法,即使依赖方法失败,那么使用alwaysRun = true