2012-04-20 4 views
1

실제로 BlockJUnit4ClassRunner의 runChild() 메서드를 재정의하고 싶었 기 때문에 클래스 (MyRunner.java)를 만들고 ExJended BlockJUnit4ClassRunner를 만들고 runChild() 메서드를 재정의했습니다. BlockJUnit4ClassRunner 대신에 우리 자신의 주자를 전달하는 방법

public class MyRunner extends BlockJUnit4ClassRunner 
{ 

@Override 
public void runChild(final FrameworkMethod method, RunNotifier notifier) { 
    System.out.println("<--------- Inside MyRunner.runChild() -------->"); 
    // my code goes here 
} 

} 

는하지만 내 오버라이드 (override) 방법으로 이동하지 않는 전화는 (심지어 MyRunner.java에 오지 않는) 및 BlockJUnit4ClassRunner.runChild() 메소드 만 호출합니다. 디버깅 한 결과 JunitCore.run (Runner runner) 메서드에 전달 된 러너가 BlockJUnit4ClassRunner이기 때문에 이것이 발견되었습니다. 잘 모르겠습니다 만 JUnit4Builder.runnerForClass() 메소드에서 온 것 같습니다.

// This is JUnit4Builder.runnerForClass(Class<?>) method 
public Runner runnerForClass(Class<?> testClass) throws Throwable 
{ 
    return new BlockJUnit4ClassRunner(testClass); 
} 


는 또한)를 JUnit4Builder.runnerForClass을 (무시하려하지만 그 또한 도움이되지 않았다. MyRunner 나 BlockJUnit4ClassRunner.runChild() 메소드를 오버라이드하는 방법이 있다면 알려주실 수 있습니다.

답변

4

아마도 @RunWith 주석을 사용하고 있지 않습니다. 자신의 러너를 사용하려면 모든 TestClass에 @RunWith 주석을 주석으로 추가해야합니다. 그러면 테스트가 그 러너와 함께 실행됩니다.

예 :

@RunWith(MyRunner .class) 
public class MyTest 
{ 
    .... 
} 
+0

덕분에 실제로 일을 많이. 따라서 며칠간 떨어져 있었으므로 테스트를 할 수 없었지만 오늘은 검증을 마쳤으며 예상대로 작동했습니다. – user85

관련 문제