2012-11-08 142 views
2

我編寫了一個自定義JUnit運行器,我希望成爲eclipse插件的一部分,該插件將使用此運行器啓動測試,而不必將@RunWith註釋應用於班上。我使用org.eclipse.debug.ui.launchShortcuts擴展點設法在'Run As'上下文菜單下獲得了一個額外的項目。但是,我不確定如何使用我的自定義亞軍來調用測試。使用自定義JUnit運行器實現從eclipse插件啓動JUnit測試

+0

請問我的答案'Eclipse如何實際運行測試'http://stackoverflow.com/a/7896628/1836幫助? –

+1

我曾看過那篇文章,這是什麼讓我這麼遠。我已經能夠通過實現ITestReference,使用internal_kind擴展點以及解開一堆內部類來獲得它的工作。但是,這似乎比它應該更復雜!爲什麼RemoteTestRunner只有一個參數來指定junit亞軍!? – ekj

回答

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; 
    } 
} 

這確實使用了一堆內部類的鏈接這一點,所以有可能是一個更好的辦法。但是,這似乎工作。

相關問題