2012-02-25 158 views
2

我已经为我的java + spring 3.0.1应用程序编写了一些单元testng测试。测试类扩展了AbstractTestNGSpringContextTests类。它使用STS 2.8.1(右键 - >运行..-> test ng)在eclipse中运行良好。但从命令行它失败了,我使用maven 2.2.1。我没有在pom.xml文件中定义任何特定的测试插件,所以我假设我使用的是默认版本。maven testng失败,但在eclipse中工作

我的信念是命令行测试方法正在同时运行,因为测试更改对象状态并且它们相互冲突。

但是我看不到任何选项来依次运行maven测试。

我说我没指定测试插件,但是我确实指定TestNG的依赖......

<dependency> 
    <groupId>org.testng</groupId> 
    <artifactId>testng</artifactId> 
    <version>6.1.1</version> 
    <scope>test</scope> 
</dependency> 

更新 - 我解决了这个问题。 该项目依赖于我在eclipse中导入和更改的另一个项目,但我没有安装.m2回购。 这意味着当我在eclipse中运行测试时,最新的更改是从eclipse工作区中的项目中选取的。但是当我从命令行运行它时,该项目的旧版本从.m2回购中获得。

+0

你能给一个测试类的例子吗? Maven默认使用surefire插件来执行测试。 – tom 2012-02-25 14:06:36

+0

我不喜欢它们,因为它们非常复杂,测试是针对远程端点的消息传递通道,并且我使用模拟对象从远程端点返回不同的结果。我可以说的是,类只是在每个方法的顶部使用@Test注释。 – user1232555 2012-02-25 14:29:27

+0

除非您另行配置,否则测试依次运行。你可以尝试升级到testng'6.4',也许可以把火狐插件升级到'2.12',看看它是否有什么区别。 – Raghuram 2012-02-26 02:07:40

回答

1

不应该单个测试包含它需要运行的所有代码,并且本质上是完全封装的?在工作中,我的老板告诉我,一次测试不应该依赖另一次测试。

+0

这就是测试如何工作,并且不依赖于其他人。并发性会成为一个问题,因为测试会模拟来自消息传递通道的返回值。即一个测试附加一个模拟对象返回'x',而另一个测试附加一个模拟对象返回'y'。如果两者都同时运行,你会得到意想不到的结果。另外,我在每次测试结束时都小心地去除了模拟对象。 – user1232555 2012-02-25 14:05:19

+0

我明白你的意思了。 – thescientist 2012-02-25 14:10:59

0

默认情况下,在maven的测试阶段使用surefire插件。并行配置的默认值为false。您可以尝试打印threadid以确定它们是在同一个线程还是在不同的线程中运行。否则,您可以明确尝试将surefire插件添加到您的pom并将并行指定为false。 此外,测试的顺序可能会不同,是给你意想不到的输出?

相关问题