2014-02-07 4 views
1

저는 몇 년 동안 JUnit에서 일해 왔으며 테스트 내 격리가 fullfil이 아닌 많은 예제를 발견했습니다. I 개발 대부분의 테스트 JUnit 테스트에서 속성을 사용하는 방법은 무엇입니까?

class ClassToTestTest { 

    // Attributes 
    private ClassToTest objectToTest; 

    // Methods 
    @Before 
    public void setup() { 
     objectToTest = new ClassToTest(); 
    } 

    @Test 
    public void test1() { 
     //do something 
     Assert... 
    } 

    @Test 
    public void test2() { 
     //do something 
     Assert... 
    } 
} 

(테스트를 수행하지 ClassToTest 객체하지만 객체) 검체의 내부 상태는 그 특성에 동일한 구조를 따른다. setup() 또는 teardown() 메소드에 결함이있는 경우 objectToTest의 일부 내부 상태가 다른 테스트로 몰래 들어갈 수 있습니다.

공유 상태가없는 것이 더 좋을까요? 더는

class ClassToTestTest { 

    // Attributes 
    // No attributes, no internal state 

    // Methods 
    @Before 
    public void setup() { 
     objectToTest = new ClassToTest(); 
    } 

    @Test 
    public void test1() { 
     localObjectToTest = createObjectToTest(); 
     //do something 
     Assert... 
    } 

    @Test 
    public void test2() { 
     localObjectToTest = createObjectToTest(); 
     //do something 
     Assert... 
    } 
} 

내가 두 번째보다 더 할 거의 같은 첫 번째 코드를 알고있는 속성이 없다,하지만 첫 번째 코드에서 당신이

// Methods 
@Before 
public void setup() { 
    objectToTest = objectToTest.reset(); 
} 

또는 더 나쁜처럼 뭔가를 할 유혹에 의존 이전 테스트에서 이전 테스트에서 objectToTest를 사용하여 시간을 "절약"하고 빈 setup() 메서드로 끝남

두 번째 코드 다음에 오는 것이므로이 지점에 도달하기가 매우 어렵습니다. 공유 상태가 없으며 모든 객체가 로컬입니다.

귀하의 의견은 무엇입니까? 이해가 되니? 그게 합당한가? 제 생각에는

답변

3

를 JUnit 테스트 방법 각각에 대해 새로운 ClassToTestTest 객체를 생성 더 읽기 텍스트를 넣어. 그러므로 어떤 분야도 다른 시험으로 몰래 빠져 나갈 수 없습니다. 세부 정보 : http://martinfowler.com/bliki/JunitNewInstance.html

+0

와우! 나는 그것을 몰랐다. 고마워, 꽤 유익한. TestNG가 그렇게하지 않는 것 같습니다. 잘 알고 있습니다. –

-1

나는 내부 상태와 다른 사람 독립적이어야한다 각각의 테스트를 수정할 수 있기 때문에 각 테스트ClassToTestTest 객체 를 생성 할 가치라고 생각합니다.

풍부한 개발자가 을 사용하면 각 테스트에서 개체의 생성자도 테스트하고 있음을 알 수 있습니다. 그런 다음 ClassToTestTest 객체를 만들고 파괴하는 메서드에서 @Before 및 @After 주석을 사용할 수도 있습니다.

하지만 어쨌든 각 테스트에서 개체를 만들 것입니다.

편집 : 굵은 글꼴을 추가하는 것은

관련 문제