2

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

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

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

但是在 Jenkins 下,执行顺序是:

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

结果,在第二种情况下,T3() 显然失败了,因为对象 o 已被 tearDown() 方法销毁,因此出现 NullPointerException。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 和 Eclipse 都具有相同的行为?如果是这样,任何帮助将不胜感激。

问候,

塞德里克

4

1 回答 1

0

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

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

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

于 2012-10-25T06:19:05.227 回答