2012-03-28 3 views
30

내 프로젝트에서는 모든 테스트를 수행하기 전에 일부 저장소 설정을 수행해야합니다. 이것은 까다로운 정적 규칙을 사용하여 수행됩니다. 그러나 모든 테스트가 끝나면 정리하는 법을 알지 못합니다. 모든 테스트 메소드의 수를 나타내는 매직 정적 숫자를 유지하고 싶지는 않습니다. 항상 유지해야합니다.모든 junit 테스트 후 정리

가장 감사하게 생각하는 방법은 모든 테스트 후에 호출되는 리스너를 추가하는 것입니다. JUnit4에 이미 인터페이스가 있습니까?


편집 : 나는 @AfterClass 주석이 방법은 마지막으로 불려 갔을 경우 알 필요가 원인이, @BeforeClass와 @AfterClass과는 아무 상관이 없습니다.

+0

같이 깨끗 ** TestNG를 ** 솔루션을 여기에서 찾을 수 있습니다 : http://stackoverflow.com/a/26381858/1857897 – dedek

답변

30

JUnit 4.9를 사용하고 있습니다. 윌이 도움말?

import junit.framework.TestCase; 

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({First.class,Second.class,Third.class}) 
public class RunTestSuite extends TestCase { 
    @BeforeClass 
    public static void doYourOneTimeSetup() { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  
} 

편집 : 나는 매우 긍정적입니다 내 솔루션 당신이 찾고있는 것을 (나는 당신이 질문을 오해하지 않는 한). 즉 모든 테스트가 끝난 후에 하나의 분해 방법을 사용하십시오. 리스너가 필요하지 않으며, JUnit은이 기능을 제공합니다. 감사.

+1

나는,이 목표를 달성 할 확신 해요 난 당신을 오해하지 않는 한 문제. – HellishHeat

+6

필자는 모든 테스트 클래스를 열거해야합니다. (심지어 지금은 여러 개이며, 카운트가 빠르게 커집니다.) 불행히도 받아 들일 수 없습니다. –

+1

미안하지만, 당신이 무엇을하려고하는지 모릅니다. 왜 열거해야하는지 전혀 모르겠다. 귀하의 질문에 더 자세하게 설명해주십시오. 모든 테스트가 끝난 후에도 테스트가 끝나면 정적 동작을 수행하기를 원하는 것처럼 읽습니다. 그게 당신이 지정한 전부입니다. 그렇다면 내 해결책이 그 일을합니다. 각 테스트 후에 AfterClass를 실행하지 않는다는 점에 유의하십시오. AllTest에 AfterClass 주석을 사용하고 있습니다. 그래서 그것은 모든 테스트 후에 호출 될 것입니다. 어쩌면 나는 단지 그것을 얻지 못할 것이다 :) – HellishHeat

1

언제든지 사용자 정의 TestRunner를 작성할 수 있습니다. 그러나 그렇게하기 전에 동일한 필요성을 평가해야합니다. @BeforeClass와 @AfterClass를 사용하는 것이 더 좋습니다. 필자가 지적 할 수있는 또 다른 예제는, 하이버 네이트가 사용자가 'import.sql'을 사용하여 단위 테스트를 할 수있는 방식이다. JUnit을 자바 문서에보다 직접적으로

public class TestListener extends RunListener { 
    @Override 
    public void testRunStarted(Description description) throws Exception { 
    // Called before any tests have been run. 
    } 
    @Override 
    public void testRunFinished(Result result) throws Exception { 
    // Called when all tests have finished 
    } 
} 

읽기 :

34

나는 org.junit.runner.notification.RunListener 예를 사용하는 것이 좋습니다. 당신은 플러그인 구성에 다음 코드를 추가하여 Maven의 확실한 (단위 테스트) 플러그인 또는 안전 장치 플러그인 (통합 테스트)에 있음을 사용할 수 있습니다

<properties> 
    <property> 
    <name>listener</name> 
    <value>com.innovatrics.afismq.it.TestListener</value> 
    </property> 
</properties> 
+1

나는이 솔루션을 훨씬 더 좋아. 모든 클래스의 이름을 지정할 필요가 없습니다. – committedandroider

1

제품군을 사용할 필요가 없습니다, 단지 @BeforeClass 및 @AfterClass를 추가 정적

public class Tests { 

    @BeforeClass 
    public static void doYourOneTimeSetup() 
    { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  

    @Test 
    public void testYourTestcase() 
    { 
     ... 
    } 
} 
+1

테스트 클래스가 두 개 이상인 경우에는 작동하지 않습니다. –

+0

예 클래스의 범위에 속합니다. – serup