我目前遇到问题。我创建了 2 个类,一个是抽象的,另一个是从第一个继承的:
public abstract class A {
@BeforeClass
protected void setUp() {
Object o = new Object();
}
@AfterClass
protected void tearDown() {
o = null;
}
@Test
public void T1() {
// whatever is done here
}
@Test(dependsOnMethod={"T1"})
public void T2() {
// whatever is done here
}
}
@Test(singleThreaded=true)
public class B extends A {
@Test(dependsOnMethod={"T2"})
public void T3() {
System.out.println(o.toString());
}
}
实际上,我在 Eclipse 和 Jenkins 之间有两种不同的行为。
当我在 Eclipse 下运行测试时,执行顺序是:
setUp()
T1()
T2()
T3()
tearDown()
但是在 Jenkins 下,执行顺序是:
setUp()
T1()
T2()
tearDown()
T3()
结果,在第二种情况下,T3() 显然失败了,因为对象 o 已被 tearDown() 方法销毁,因此出现 NullPointerException。Jenkins 通过使用 maven-surefire-plugin 通过指定 testng.xml 文件调用 TestNG。这里是:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestSuite" parallel="classes" thread-count="1" verbose="1">
<test name="Test B">
<classes>
<class name="main.pkg.B" />
</classes>
</test>
</suite>
有没有办法让 Jenkins 和 Eclipse 都具有相同的行为?如果是这样,任何帮助将不胜感激。
问候,
塞德里克