2017-09-29 64 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"); 
    } 
} 

在輸出中, '構造' 被印刷兩次,和 '設置' 被印刷兩次。 '測試1'和'測試2'每打印一次。

回答

1

這是JUnit的標準生命週期。在調用每個測試方法之前創建該類的新實例。創建該實例需要調用測試類的構造函數。鑑於構造函數已被調用,那麼調用任何@PostConstruct方法都是有意義的。

+0

哇,我根本不知道這一點。我一直在試圖找到一個解釋,但無法找到任何地方。我最初認爲該類實例化了一次,然後在實例內依次調用每個@Test方法。那麼現在我知道這是JUnit的標準生命週期,它非常有意義。謝謝! –

相關問題