2013-01-10 3 views
5

각 JUnit 테스트를 실행하기 전에 일부 작업을 수행해야하는 프로젝트에서 작업하고 있습니다. 이 문제는 JUnit 코어에 추가 될 수있는 RunListener을 사용하여 해결되었습니다. 프로젝트 어셈블리는 메이븐을 사용하여 수행, 그래서 난 내 pom 파일에이 라인이되어 시험 인 IntelliJ를 사용하기 시작하면 (내부 테스트를 사용IntelliJ IDEA에서 JUnit RunListener 사용

mvn clean test 

그러나 :

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-surefire-plugin</artifactId> 
      <version>2.12</version> 
      <configuration> 
       <properties> 
        <property> 
         <name>listener</name> 
         <value>cc.redberry.core.GlobalRunListener</value> 
        </property> 
       </properties> 
      </configuration> 
     </plugin> 

그래서, 모든 것을 사용하여 작동을 러너)에서는 RunListener으로 코딩 된 동작이 실행되지 않으므로 IntelliJ 인프라를 사용하여 테스트를 수행 할 수 없습니다.

IntelliJ는 pom 파일에서이 구성을 구문 분석하지 않으므로 IntelliJ에 JUnit 코어에 RunListener을 추가하도록 명시 적으로 지시하는 방법이 있습니까? 구성에서 일부 VM 옵션을 사용할 수 있습니까?

maven 출력을 읽는 대신 아름다운 IntelliJ 테스트 환경을 사용하는 것이 훨씬 편리합니다.

P. 수행해야 할 작업은 기본적으로 정적 환경 (클래스의 일부 정적 필드)을 다시 설정하는 것입니다.

답변

3

Intellij에서 RunListener를 지정하는 방법을 찾지 못했지만 다른 솔루션은 고객의 러너를 작성하고 @RunWith()에 주석을 달아 테스트하는 것입니다.

public class MyRunner extends BlockJUnit4ClassRunner { 
    public MyRunner(Class<?> klass) throws InitializationError { 
     super(klass); 
    } 

    @Override 
    protected void runChild(final FrameworkMethod method, RunNotifier notifier) { 
     // run your code here. example: 
     Runner.value = true;    

     super.runChild(method, notifier); 
    } 
} 

샘플 정적 변수 :

public class Runner { 
    public static boolean value = false; 
} 

는 다음과 같이 테스트를 실행합니다

@RunWith(MyRunner.class) 
public class MyRunnerTest { 
    @Test 
    public void testRunChild() { 
     Assert.assertTrue(Runner.value); 
    } 
} 

이 당신이 RunListener없이 정적 초기화를 할 수 있습니다.

+0

다른 솔루션을 이용해 주셔서 감사합니다. '@ Before' 메서드가 지정된 모든 테스트 클래스에 하나의 전역 부모를 추가하려고합니다. 따라서 모든 테스트 파일을 편집해야합니다. (IntelliJ 버그 추적기에서 티켓을 만들어이 기능을 추가하겠습니다. – dbolotin

관련 문제