使用自定义JUnit运行器实现从eclipse插件启动JUnit测试

时间:2012-11-08 05:19:52

标签: junit eclipse-plugin

我编写了一个自定义JUnit运行器,我希望它成为eclipse插件的一部分,它将使用此运行器启动测试,而无需将@RunWith注释应用于该类。我已经设法使用org.eclipse.debug.ui.launchShortcuts扩展点在'Run As'上下文菜单下获得了一个额外的项目。但是,我不确定如何使用我的自定义运行程序调用测试。

1 个答案:

答案 0 :(得分:3)

所以我找到了一种方法来做我想做的事。但是,它看起来确实有些笨拙。但是,我认为我会在这里发布答案,以防其他人遇到同样的问题。

首先你必须注册一个这样的junit:

<extension point="org.eclipse.jdt.junit.internal_testKinds">
      <kind
            id="my.junit.kind"
            displayName="Your Kind Name" 
            finderClass="org.eclipse.jdt.internal.junit.launcher.JUnit4TestFinder"
            loaderPluginId="org.eclipse.jdt.junit4.runtime"
            loaderClass="your.test.loader.MyLoaderClass">
         <runtimeClasspathEntry pluginId="org.eclipse.jdt.junit4.runtime" />
         <runtimeClasspathEntry pluginId="org.eclipse.jdt.junit.core" />        
         <runtimeClasspathEntry pluginId="org.eclipse.jdt.junit.runtime"/>    
      </kind>
   </extension>

在xml中,您必须指定org.eclipse.jdt.internal.junit.runner.ITestLoader的自定义实现,然后返回org.eclipse.jdt.internal.junit.runner.ITestReference的实现。核心部分是ITestReference的实现,因为这是您创建自定义JUnit运行器的实例的地方。

  public class MyTestReference extends JUnit4TestReference
   {

      public MyTestReference(final Class<?> p_clazz, String[] p_failureNames)
      {
         super(new Request()
         {
            @Override
            public Runner getRunner()
            {
               return new MyCustomRunner(p_clazz);
            }

         }, p_failureNames);
      }
...
}

最后,您必须将其与适当设置类型的启动快捷方式

相关联
public class MyJunitLaunchShortcut extends JUnitLaunchShortcut
{
   @Override
   protected ILaunchConfigurationWorkingCopy createLaunchConfiguration(IJavaElement p_element) throws CoreException
   {
      ILaunchConfigurationWorkingCopy config = super.createLaunchConfiguration(p_element);
      config.setAttribute(JUnitLaunchConfigurationConstants.ATTR_TEST_RUNNER_KIND, "my.junit.kind");
      return config;
   }
}

这确实使用了一堆内部类,所以可能有更好的方法。但这似乎有效。