Eclipse与Jenkins中的TestNG继承行为

时间:2012-10-24 13:23:57

标签: java eclipse inheritance jenkins testng

我目前遇到了问题。我创建了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和Eclipse之间有两种不同的行为。詹金斯。

当我在Eclipse下运行我的测试时,执行顺序是:

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

但在詹金斯的领导下,执行顺序是:

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

结果,在第二种情况下,T3()明显失败,由于NullPointerException,因为Object o已被tearDown()方法销毁。 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&amp; Eclipse有相同的行为吗? 如果是这样,任何帮助将非常感激。

此致

塞德里克

1 个答案:

答案 0 :(得分:0)

可能是eclipse中的testng插件版本与项目中的版本不同。

当你使用maven通过jenkins运行时,它会使用你的pom中的testng依赖项。而在eclipse中你可能已经配置了一些用于eclipse运行的其他testng插件版本。

我在pom中有6.5.1作为testng依赖版本,在插件版本中有6.5.2,我得到了两者的正确输出。我之前将testng 6.2.1作为我的maven依赖,我可以看到你看到的问题。因此,匹配两个版本可能会有所帮助。