2008-10-08 7 views
9

TestCase 오브젝트의 새 (또는 다른) 인스턴스가 JUnit 테스트 케이스에서 각 테스트 메소드를 실행하는 데 사용됩니까? 또는 하나의 인스턴스가 모든 테스트에 재사용됩니까? 이 테스트를 실행하는 동안, 얼마나 많은 인스턴스 MyTest 클래스는JUnit TestCase 오브젝트 인스턴스화

public class MyTest extends TestCase { 
    public void testSomething() { ... } 
    public void testSomethingElse() { ... } 
} 

을 만들어?

가능한 경우 동작을 확인할 수있는 문서 또는 소스 코드에 대한 링크를 제공하십시오.

답변

4

JUnit 문서에서 질문에 대한 명확한 답을 찾을 수는 없지만 anjanb가 작성한대로 각 테스트는 다른 테스트와 독립적이므로 테스트마다 새 TestCase 인스턴스를 만들 수 있습니다. 달려 가라. 당신이 비싼 테스트 설정은 테스트 클래스의 모든 테스트 케이스에서 공유 할 할 ("기구을")가있는 경우

, 당신은이 결과를 달성하기 위해 정적 메서드에 @BeforeClass 주석을 사용할 수 있습니다 : http://junit.sourceforge.net/javadoc_40/org/junit/BeforeClass.html. 그러나 각 테스트에 대해 새 인스턴스가 만들어 질 수도 있지만 @BeforeTest 메서드가 초기화 된 정적 데이터에는 영향을 미치지 않습니다.

+0

@BeforeClass는 JUnit 3에서 사용할 수 없습니다. 이에 해당하는 내용은 다음과 같습니다. http://stackoverflow.com/questions/3023091/does-junit-3-have-something-analogous-to-beforeclass –

8

예, 별도의 인스턴스가 만들어집니다.

해당 테스트를 실행하는 동안 MyTest 인스턴스 2 개가 생성됩니다.

다른 동작을 원하면 하나의 옵션으로 TestNG (http://testng.org/doc/)라는 유사한 도구를 사용하는 것입니다.

+0

빠른 응답을 보내 주셔서 감사합니다. 이 동작을 확인할 수있는 문서 또는 소스 코드에 대한 링크를 제공해주십시오. – Manki

+0

생성자를 제공하고 System.out.println을 추가하여 쉽게 확인할 수 있습니다. –

2

생성자에서 데이터가 초기화되고 다시 초기화되는 것에 대해 우려하고 있으므로이 질문은 setUp() 및 tearDown()을 통해서만 테스트 케이스 데이터를 초기화하는 방법을 배웁니다.

0

예에 -

public class MyTest extends TestCase { 
    public MyTest() { System.out.println("MyTest Constructor"); 
    public void setUp() { System.out.println("MyTest setUp"); 
    public void tearDown() { System.out.println("MyTest tearDown"); 
    public void testSomething() { System.out.println("MyTest testSomething"); 
    public void testSomethingElse() { System.out.println("MyTest testSomethingElse"); 
} 

소스 코드 (당신과 나의 예를 JUnit을 3 최신 버전의 것을 포함)를보십시오. 이 디자인으로 인해 인스턴스 변수에 저장된 데이터에 테스트간에 액세스 할 수 없음을 발견했습니다.