2015-10-05 40 views
9

如果您希望它在所有@Test方法之前運行一次,則JUnit的@BeforeClass註釋必須聲明爲static。但是,這不能用於依賴注入。JUnit @BeforeClass非靜態解決Spring引導應用程序

我想在我運行JUnit測試之前清理一個數據庫,使用Spring Boot啓動@Autowire。我不能@Autowire靜態字段,所以我需要考慮工作。有任何想法嗎?

回答

17

只需使用@Before(而不是@BeforeClass)(或BeforeTransaction(取決於您如何初始化數據庫))。此註釋必須附加到非靜態公共方法。

當然:@Before每個測試用例方法之前運行(不喜歡@BeforeClass只運行一次)。但是,如果你想正好一次運行它,然後使用一個靜態標記字段。

private static boolean initialized = false; 
... 
@Before 
public void initializeDB() { 
    if (!initialized) { 
     ... //your db initialization 
     initialized = true; 
    } 
} 
--- 
+0

啊好的,這很簡單,很有意義。 – Kingamere

+0

這就是我必須使用JUnit時所要做的。但我更喜歡使用TestNG,它具有非靜態方法中的所有註釋:對於TestNG,@BeforeClass將在非靜態方法上定義,並且將在該類中的所有測試方法之前執行一次。 –

0

看看DBUnit庫 - 它的目的是執行你描述的動作。它可以創建拆除數據庫實例併爲您提供簡單的方法來執行此操作。