在Eclipse中从多个项目运行JUnit测试

6
我可能正在失去理智,因为今天早上当我升级到Eclipse Kepler后,我尝试同时运行多个Eclipse项目的单元测试,但失败了。我选择了多个项目,右键单击菜单,而“Run as…”选项消失了。
“该死的Kepler!”我想,并启动了我的旧Juno安装程序,以说服自己这种行为已经改变了。然而,在那里也不起作用。
现在,我怀疑自己是否曾经真正做到过这一点。许多 其他 Stack Overflow问题和其他网站表明,这是一个困难的,甚至不可能的任务。但是,我确信最近过去我曾经这样做过,这让我有点心神不宁。

那么...这个功能在Kepler或Juno中是否可行?有人能推荐一个常用的插件来启用该功能吗(我错误地认为它是默认行为)?

背景:我有一个通过m2e管理的多模块Maven项目,并期望我可以选择几个项目并运行所有单元测试。


你还有可用的运行配置吗?如果有,只需为其创建一个配置并运行即可。 - JREN
@JREN 抱歉,是的,“运行配置...”选项仍然存在。但是如果我选择这种方式,我只能运行一个项目的测试,而不能运行多个项目的测试。 - Duncan Jones
应该有一个单选按钮可用,上面写着“在所选项目、包或源文件夹中运行所有测试:”如果您选择了2个项目,则应运行这两个项目的所有单元测试。至少对我来说是有效的 :-/。我正在使用Eclipse Juno。 - JREN
1
@JREN,你能详细描述一下你是如何做到的吗?那里的“选择...”按钮不允许多选,你只能选择一个项目、包或文件夹。 - E-Riz
对应的 Eclipse Bug:https://bugs.eclipse.org/bugs/show_bug.cgi?id=111126 - Christian
4个回答

6
您可以使用Classpath Suite在多个项目间执行JUnit测试。 一般情况下,您只需要做以下几步:
  1. 创建一个Eclipse项目,并使其依赖于您想要测试的所有项目。
  2. 编写一个测试套件:

    @RunWith(ClasspathSuite.class)
    public class MySuite

请查看这篇文章:Roger Rabbit - JUnit Tests Runner Across Multiple Projects,其中包含了详细的步骤说明和代码示例。

3

如果使用键盘快捷键(默认为Alt-Shift-XT)而非上下文菜单,您将获得以下对话框:

enter image description here

这是一个提示,为什么Eclipse在菜单中没有显示该选项 - 它认为没有测试。这显然是错误的。

通过查看JUnitLaunchShortcut的Eclipse源代码(第160-191行),我发现了这个:

private void launch(Object[] elements, String mode) {
    try {
        IJavaElement elementToLaunch= null;

        if (elements.length == 1) {
...
        }
        if (elementToLaunch == null) {
            showNoTestsFoundDialog();
            return;
        }

只有选择恰好一个测试类才能使其工作。

菜单选项的可见性由org.eclipse.jdt.junit插件配置(plugin.xml)控制,而该插件也存在同样的问题(221-234行):

<contextualLaunch>
    <enablement>
        <with variable="selection">
            <count value="1"/>
            <iterate>
                <adapt type="org.eclipse.jdt.core.IJavaElement">
                    <test property="org.eclipse.jdt.core.isInJavaProject"/>
                    <test property="org.eclipse.jdt.core.hasTypeOnClasspath" value="junit.framework.Test"/>
                    <test property="org.eclipse.jdt.junit.canLaunchAsJUnit" forcePluginActivation="true"/>
                </adapt>
            </iterate>
        </with>
    </enablement>
</contextualLaunch>

在开始的<count value="1"/>位作为选择器,它意味着同样的事情:你必须选择一个项目,否则菜单项就不会显示出来。
我认为我们已经找到了问题 :)
我也检查了这两个文件的历史记录,自2006年9月以来它们都没有被更改过。所以如果你用更新版本的话,你很可能安装了某种插件让你做到了这一点。

1

1
无法在Eclipse中使用普通的测试运行程序来运行多个项目的测试。不过,有几种选择:
  1. 创建一个运行所有内容的ant/maven脚本
  2. 如果您想每次保存时运行测试,则可以使用Infinitest
从Infinitest网站上可以了解到:

Infinitest是Eclipse和IntelliJ的持续测试插件。每当源代码发生更改时,Infinitest会运行由于这些更改可能失败的所有测试。

Infinitest可能会运行所有项目中的所有测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接