2012-11-08 2 views
2

@ RunWith 주석을 적용하지 않고이 러너를 사용하여 테스트를 실행하는 Eclipse 플러그인의 일부가 될 사용자 정의 JUnit 러너를 작성했습니다. 클래스. 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을 종류를 등록해야합니다 : XML에서

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

당신이 차례로 org.eclipse.jdt.internal.junit.runner.ITestReference의 구현을 반환 org.eclipse.jdt.internal.junit.runner.ITestLoader의 사용자 지정 구현을 지정해야합니다. 핵심 부분은 사용자 정의 JUnit 러너의 인스턴스를 생성하기 때문에 ITestReference를 구현 한 것입니다.

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

종류를 설정하는 시작 바로 가기에이 링크, 그래서 더 좋은 방법은 아마이있다. 그러나 이것은 효과가있는 것으로 보인다.

관련 문제