2014-03-31 68 views

回答

0

註釋@BeforeClass允許爲一組測試運行初始化代碼。這是從javadoc的摘錄:

有時幾個測試需要共享計算昂貴的安裝 (如登錄到數據庫)。雖然這可能會影響測試的獨立性,但有時候這是一種必要的優化。 使用@BeforeClass註釋公共靜態void no-arg方法會導致 它會在類中的任何測試方法之前運行一次。超類的@BeforeClass方法將在當前類的 之前運行。

+2

'@ BeforeClass'通常不是一種選擇使用_Spring的TestContext Framework_時,因爲你不會有在'@BeforeClass從'ApplicationContext'訪問'DataSource' '方法。 –

1

除非你願意有一個不同的ApplicationContext加載(和緩存)每個測試(見下文),你唯一的選擇是定義一個static boolean場,並設置它在一個@Before方法填充數據庫,如果它是班上第一次參加。我想這就是你在@Before方法中使用if的含義。

現在,如果您願意爲每個測試類別加載不同的ApplicationContext,則可以爲給定的測試類別定義填充數據庫的唯一@Configuration類或XML配置文件。然後,您可以標註您的測試類,如:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({ "/standard-test-config.xml", "TestClass1-config.xml" }) 
@DirtiesContext(classMode = ClassMode.AFTER_CLASS) 
public class TestClass1 {/* ... */ } 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { StandardTestConfig.class, TestClass1.Config.class }) 
@DirtiesContext(classMode = ClassMode.AFTER_CLASS) 
public class TestClass1 {/* ... */ } 

然後,您可以在@Configuration類使用<jdbc:embedded-database ...><jdbc:initialize-database ...> XML或EmbeddedDatabaseBuilderResourceDatabasePopulator(與DatabasePopulatorUtils)。

當然,像這樣爲每個測試類加載不同的ApplicationContext可能會極大地降低測試套件的速度,尤其是如果ApplicationContext需要很長時間才能加載。所以你需要考慮到這一點。

問候,

山姆

相關問題