2012-10-24 37 views
2

我目前遇到的問題。我創建了2類,一類是抽象的,另一種是從第一個繼承:TestNG的繼承行爲VS詹金斯

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 &詹金斯2種之間不同的行爲。

當我的Eclipse下運行我的測試中,執行順序是:

setUp() 
T1() 
T2() 
T3() 
tearDown() 

但詹金斯下,執行順序是:

setUp() 
T1() 
T2() 
tearDown() 
T3() 

其結果是,在第二種情況下,T3 ()明顯出現故障時,由於一個NullPointerException作爲對象O已被拆卸()方法被破壞。 TestNG的被稱爲詹金斯,通過使用行家-萬無一失-插件,通過指定的testng.xml文件。那就是:

<!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> 

有沒有一種方法,使雙方詹金斯& Eclipse中具有相同的行爲呢? 如果是這樣,任何幫助將不勝感激。

問候,

塞德里克

+0

將名稱更改爲類似setUpBeforeClass的內容並查看會發生什麼。 –

回答

0

這可能是因爲在Eclipse中的TestNG插件版本比一個項目中的不同。

當您通過使用maven詹金斯運行,它使用從你的POM TestNG的依賴。而在eclipse中,您可能已經配置了一些用於eclipse運行的其他testng插件版本。

我在聚甲醛和6.5.1爲TestNG的依賴6.5.2版本的插件版本,我得到來自正確的輸出。我之前將testng 6.2.1作爲我的maven依賴項,我可以看到你所看到的問題。所以可能匹配兩個版本可能會有幫助

+0

謝謝!我也在Jenkins下使用6.2.x版本,而我在Eclipse下使用6.7版本的TestNG! 順便說一句,我也發現在這個變化中,6.3版本修復了我的問題: 「修正:@AfterClass未在某些子類化情況下運行」 –