通过 Ant 与 IntelliJ IDEA 使用 JUnit 的不同行为
通过 IntelliJ IDEA 10 运行一些集成测试并从命令行使用 Ant 时,我遇到了不同的行为。具体来说,调用单例的测试通过 Ant 失败,通过 IDEA 成功。我知道使用单例的缺点,但这是我继承的代码,并且希望在删除它们之前创建测试:)
我已经验证两者都使用相同版本的 JUnit (4.8.1)。
以下是 Ant build.xml 文件中的一个片段:
<junit printsummary="yes"
fork="yes"
forkmode="perTest"
haltonfailure="no">
<classpath refid="classpath.test"/>
<formatter type="xml"/>
<batchtest todir="${report.home}/tmp">
<fileset dir="${test.home}">
<include name="**/*Test.java"/>
<exclude name="**/*TransactionalTests.java"/>
</fileset>
</batchtest>
</junit>
由于我在 IDEA 中找不到有关 JUnit 默认设置的文档,因此在运行测试时我无法确定它们是否/如何分叉等。
非常感谢任何有关通过 Ant 和 IntelliJ 获得相同行为的建议。
I'm experiencing different behavior when running some integration tests via IntelliJ IDEA 10 and using Ant from the command line. Specifically, tests that call singletons fail via Ant and succeed via IDEA. I'm aware of the downfalls of using singletons but this is code that I've inherited and would like to create tests before removing them :)
I've verified that both are using the same version of JUnit (4.8.1).
Here's a snippet from the Ant build.xml file:
<junit printsummary="yes"
fork="yes"
forkmode="perTest"
haltonfailure="no">
<classpath refid="classpath.test"/>
<formatter type="xml"/>
<batchtest todir="${report.home}/tmp">
<fileset dir="${test.home}">
<include name="**/*Test.java"/>
<exclude name="**/*TransactionalTests.java"/>
</fileset>
</batchtest>
</junit>
Since I cannot find documentation on the default settings of JUnit in IDEA, I'm not able to determine if/how they fork, etc. when running tests.
Any suggestions on getting the same behavior via Ant and IntelliJ is greatly appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
IDEA 在单个 JVM 实例中运行所有测试,而您通过 Ant 进行分叉以在其自己的 JVM 实例中运行每个测试。由于您的代码中有单例,因此结果可能会有所不同。 IDEA 目前无法选择分叉测试,尽管此功能已在计划中。
由于您使用的是单例,因此执行顺序也可能是这样。 IDEA 按字母顺序运行测试,并且无法更改它。因此,为了获得相同的行为,如果测试的顺序很重要(这不是一个好主意),您需要告诉 Ant 以相同的顺序运行测试。
另外,您通过 Ant 排除了一些测试,IDEA 没有这样的选项。如果您的其他测试依赖于排除的测试,结果将会有所不同。
IDEA runs all the tests in the single JVM instance, while you are forking via Ant to run each test in its own JVM instance. Since you have singletons in your code, results could be different. IDEA has no option to fork tests at the moment, though this feature is planned.
The order of execution also might be the case since you are using singletons. IDEA runs tests in alphabetical order and there is no way to change it. So, to get identical behavior, you need to tell Ant to run your tests in the same order if the order of tests is important (which is not a good idea).
Also, you have some tests excluded via Ant, IDEA doesn't have such option. If your other tests depend on the excluded tests, results will be different.