2012-10-24 39 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未在某些子类化情况下运行” –