2012-02-03 91 views
1

我们在Eclipse中运行我们的junit测试看起来很好,但是当我们将它移动到哈德森或jenkins时,测试似乎挂起从未返回。它绝对是相同的代码,我只是在Eclipse和Hudson中运行测试的区别。在Jenkins的Junit测试挂起

+0

它们必须挂在某处,查看日志,添加一些日志记录,换句话说,在讨论中添加更多详细信息 – Kris 2012-02-03 14:34:43

+0

日志显示,存在数据库死锁,或者测试只是挂在那里(我正在更改无论如何测试),但问题是为什么它不会在日食中发生,但总是发生在詹金斯。 – 2012-02-03 14:42:02

+0

可能是连接/连接池问题? – Kris 2012-02-03 14:46:24

回答

0

在eclipse中,你通常只运行一个测试类或一个测试方法。为此测试启动和停止“新鲜”的Java虚拟机。

我想詹金斯在一台Java虚拟机中运行所有测试。这可以产生巨大的差异。

尝试一次运行所有外部eclipse和外部哈德逊测试(如果你有一个maven项目应该很简单)。结果是什么?也许你可以配置你的测试运行来在每个测试中分叉Java VM(这可以通过配置surefire插件的maven来实现)。

+0

你好!多数民众赞成在我想听到的,似乎朝着正确的方向,一个简单的mvn测试外日食,运行良好。我真的很感兴趣,如何配置surefire来分叉JVM,如果你知道如何徘徊?对于Eclipse中每个测试的“新鲜”JVM启动和停止,你还有多确定?谢谢! – 2012-02-03 16:39:26

+0

如果按下运行(或调试)按钮,Eclipse会每次启动一个新的JVM。但是如果你的测试在mvn测试中运行良好,那么这可能不是问题所在。 – 2012-02-03 17:48:25

+0

@shanyangqu如果'mvn test'运行良好,看起来没有必要分叉JVM。尽管如此,你可以尝试将[forkMode](http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#forkMode)配置属性设置为'always'(details [here](http ://stackoverflow.com/q/3185850/367285)) – FrVaBe 2012-02-03 20:54:15

0

我的猜测是看内存的限制。尝试增加从Jenkins开始的maven进程的内存限制。

我的另一个猜测是看Jenkins的Maven构建是否被允许执行并行的子模块。如果是,它可能会导致一些难以找到的竞争条件。

0

测试是否在Eclipse和Hudson中以相同的方式执行?我的猜测是,Eclipse中的测试是逐个执行的(或者通过类的方式)执行的,并且在Hudson中通过构建脚本(如Maven或Ant)来执行?如果您从本地计算机上的终端执行测试套件,会发生什么情况?