2

現在、問題が発生しています。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 の両方を同じ動作にする方法はありますか? もしそうなら、どんな助けでも大歓迎です。

よろしく、

セドリック

4

1 に答える 1

0

Eclipse の testng プラグインのバージョンがプロジェクトのものと異なる可能性があります。

maven を使用して jenkins 経由で実行すると、pom の testng 依存関係が使用されます。一方、Eclipse では、Eclipse の実行に使用される他の testng プラグイン バージョンを構成している可能性があります。

pom の testng 依存関係バージョンとして 6.5.1 があり、プラグイン バージョンの 6.5.2 があり、両方から正しい出力が得られます。私は以前、maven 依存関係として testng 6.2.1 を持っていましたが、あなたが見ている問題を見ることができました。したがって、おそらく両方のバージョンを一致させると役立つ場合があります。

于 2012-10-25T06:19:05.227 に答える