現在、問題が発生しています。2 つのクラスを作成しました。1 つは抽象クラスで、もう 1 つは最初のクラスから継承されたものです。
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 の間で 2 つの異なる動作が得られました。
Eclipse でテストを実行すると、実行順序は次のようになります。
setUp()
T1()
T2()
T3()
tearDown()
しかし、Jenkins では、実行順序は次のとおりです。
setUp()
T1()
T2()
tearDown()
T3()
その結果、2 番目のケースでは、T3() は、TearDown() メソッドによってオブジェクト o が破棄されたため、NullPointerException が原因で明らかに失敗します。TestNG は、maven-surefire-plugin を使用し、testng.xml ファイルを指定して、Jenkins によって呼び出されます。ここにあります:
<!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 の両方を同じ動作にする方法はありますか? もしそうなら、どんな助けでも大歓迎です。
よろしく、
セドリック