从其他Eclipse插件调用JUnit

时间:2011-11-09 11:19:35

标签: eclipse eclipse-plugin junit

我正在为Eclipse开发,一个功能是运行JUnit测试。现在我的插件检测工作区中项目的JUnit测试,之后我想调用JUnit来运行这个测试。

我听说过ILaunch,ILaunchConfigurationDelegate,JUnitLaunchConfigurationDelegate,但我找不到这个例子,而且我也不确定我是否必须使用它!

- 提前致谢

2 个答案:

答案 0 :(得分:2)

请参阅我对How does Eclipse actually run Junit tests?的回答。您需要创建一个运行配置,然后使用配置调用JUnitLaunchConfigurationDelegate#launch()。

最简单的方法是向扩展点org.eclipse.debug.ui.launchShortcuts添加快捷方式。使用正确的configurationType,您可以创建正确的类型,通常,Eclipse将完成剩下的工作。事实上,这正是我们在Scala IDE中所做的。

以下是来自scala-ide的相关XML:

<extension point="org.eclipse.debug.ui.launchShortcuts">
    <shortcut
          label="%JUnitShortcut.label"
          icon="$nl$/icons/full/obj16/julaunch.gif"
          helpContextId="org.eclipse.jdt.junit.launch_shortcut"
          class="org.eclipse.jdt.junit.launcher.JUnitLaunchShortcut"
          modes="run, debug"
          id="scala.tools.eclipse.scalatest.junitShortcut">
       <contextualLaunch>
          <enablement>
             <with variable="selection">
                <count value="1"/>
                <iterate>
                   <adapt type="org.eclipse.jdt.core.IJavaElement">
                      <test property="org.eclipse.debug.ui.matchesPattern" value="*.scala"/>
                      <test property="org.eclipse.jdt.core.isInJavaProject"/>
                      <test property="org.eclipse.jdt.core.hasTypeOnClasspath" value="junit.framework.Test"/>
                      <or>
                      <test property="scala.tools.eclipse.launching.canLaunchAsJUnit" forcePluginActivation="true"/>
                      <test property="scala.tools.eclipse.launching.junit.canLaunchAsJUnit" forcePluginActivation="true"/>
                      </or>
                   </adapt>
                </iterate>
             </with>
          </enablement>
       </contextualLaunch>
       <configurationType
             id="org.eclipse.jdt.junit.launchconfig">
       </configurationType>
       <description
             description="%DebugJUnitLaunchShortcut.description"
             mode="debug">
       </description>
       <description
             description="%RunJUnitLaunchShortcut.description"
             mode="run">
       </description>
    </shortcut>
</extension>

重要的元素是&lt; contextualLaunch&gt;,它定义了一组需要为true的测试,以便将作为JUnit启动的选项呈现给用户。其中大多数都是自解释的,但我们也scala.tools.eclipse.launching.canLaunchAsJUnit,它引用了扩展点org.eclipse.core.expressions.propertyTesters。这些属性测试人员测试代码是否可以作为JUnit启动(例如,测试中的类扩展了TestCase或其他)。

如果您需要更多详细信息,我建议您下载Scala IDE并查看代码,但它是用Scala编写的。

答案 1 :(得分:0)

我重写了launche junit服务的一部分,然后通知它调用调试并运行的项目。

请参阅我的实现以致电JUnitLaunch