2012-11-28 3 views
2

나는 비슷한 질문을 모두 보았습니다. 그러나 제 생각에는 그들 중 누구도 이에 대한 확실한 대답을하지 못합니다. 나는 테스트 클래스 (JUnit 4뿐만 아니라 JUnit 3에도 관심이있다.)와 그 클래스 내에서 프로그래밍 방식으로/동적으로 (명령 행에서가 아니라) 개별 테스트 메소드를 실행하려고한다. 말하자면, 5 가지 테스트 메소드가 있지만 2 만 실행하고 싶습니다. 어떻게 프로그래밍 방식으로/동적으로 (커맨드 라인, Eclipse 등이 아닌) 이것을 할 수 있습니까?JUnit 4 테스트 클래스에서 단일 메소드를 실행하는 방법은 무엇입니까?

또한, 테스트 클래스에 @Before 주석 방법이되는 경우가있다. 따라서 개별 테스트 방법을 실행할 때는 @Before도 미리 실행해야합니다. 어떻게 극복 할 수 있습니까? 사전에

감사합니다.

답변

2

이 간단한 하나의 방법 주자를 이동하는 것입니다. 그것은 JUnit 4에서는 프레임 워크를 기반으로하지만 어떤 방법을 실행할 수 있습니다, 반드시

private Result runTest(final Class<?> testClazz, final String methodName) 
      throws InitializationError { 
     BlockJUnit4ClassRunner runner = new BlockJUnit4ClassRunner(testClazz) { 
      @Override 
      protected List<FrameworkMethod> computeTestMethods() { 
       try { 
        Method method = testClazz.getMethod(methodName); 
        return Arrays.asList(new FrameworkMethod(method)); 

       } catch (Exception e) { 
        throw new RuntimeException(e); 
       } 
      } 
     }; 
     Result res = new Result(); 
     runner.run(res); 
     return res; 
    } 

    class Result extends RunNotifier { 
     Failure failure; 

     @Override 
     public void fireTestFailure(Failure failure) { 
      this.failure = failure; 
     }; 

     boolean isOK() { 
      return failure == null; 
     } 

     public Failure getFailure() { 
      return failure; 
     } 
    } 
@Test

주석이 없습니다
0

사용자 정의 TestRunner으로 만 가능하다고 생각합니다. 테스트를 시작할 때 인수로 실행할 테스트의 이름을 전달할 수 있습니다. 더 멋진 솔루션은 커스텀 어노테이션을 구현하는 것입니다 (@TestGroup을 말하면됩니다). 이것은 그룹 이름을 인수로 사용합니다. 테스트 메소드에 주석을 달아서 동일한 그룹 이름을 함께 실행하려는 테스트를 제공 할 수 있습니다. 다시 테스트를 시작할 때 그룹 이름을 인수로 전달하십시오. 테스트 러너 내에서 해당 그룹 이름을 가진 메소드 만 수집하고 테스트를 시작하십시오.

그러나,이에 대한 간단한 솔루션은 다른 파일을 별도로 실행하려는 이러한 테스트 ...