2017-09-29 7 views
0

테스트를 실행하기 전에 @PostConstruct을 사용하여 몇 가지 초기 설정을했지만, 테스트 클래스가 초기화 된 후 한 번만 실행되는 대신 @PostConstruct 메서드가 각각의 모든 테스트에서 실행중인 것처럼 보입니다. @PostConstruct 전에 각각의 테스트 전에 생성자가 호출되는 것을 볼 수 있습니다. 왜 테스트 클래스가 모든 @Test 메소드에서 한 번만 초기화되는 대신 초기화됩니까?@SpringRunner가 각 테스트에서 클래스를 다시 초기화하는 이유는 무엇입니까?

내가 spring-boot-starter-test:1.5.7.RELEASE

샘플 테스트 설정 사용하고 있습니다 : 출력, '생성자'두 번 인쇄에서

@RunWith(SpringRunner.class) 
public class TestClass { 

    public TestClass() { 
     System.out.println("constructor"); 
    } 

    @PostConstruct 
    public void setup() { 
     System.out.println("setting up"); 
    } 

    @Test 
    public void test1() { 
     System.out.println("test 1"); 
    } 

    @Test 
    public void test2() { 
     System.out.println("test 2"); 
    } 
} 

을 두 번 인쇄 '설정'. 'test 1'과 'test 2'가 각각 한 번씩 인쇄됩니다.

답변

1

이것은 JUnit의 표준 라이프 사이클입니다. 각 테스트 메소드가 호출되기 전에 클래스의 새 인스턴스가 만들어집니다. 이 인스턴스를 생성하려면 테스트 클래스의 생성자가 호출되어야합니다. 생성자가 호출되면, @PostConstruct 메서드를 호출하는 것이 좋습니다.

+0

와우, 나는 이것을 전혀 몰랐다. 나는 이것에 대한 설명을 찾으려고 노력했지만 아무데도 그것을 찾을 수 없었다. 처음에는 클래스가 한번 인스턴스화되고 각 @Test 메소드가 순차적으로 인스턴스 내에서 호출 될 것이라고 생각했습니다. 자 이제 이것이 JUnit의 표준 라이프 사이클이라는 것을 알았으니 완벽하다고 할 수 있습니다. 감사! –