2014-03-31 45 views
2

我有標註爲一個集成測試類遵循Spring:爲什麼在每個測試課結束時不會調用@PreDestroy?

@WebAppConfiguration 
@ContextConfiguration(classes = {AppConfiguration.class}) 
@RunWith(SpringJUnit4ClassRunner.class)  
public class CacheConsumerTest { 

} 

這裏是我的AppConfiguration

@Configuration  
@ComponentScan(basePackages = {"com.etc.etc.etc."}) 
@EnableWebMvc 
public class AppConfiguration { 
} 

出於某種原因,沒有我@Component@PreDestroy獲取調用在所有測試中CacheConsumerTest末。然而,在開始運行任何測試之前,都會調用@PostConstruct

任何人都知道問題可能是什麼?我的一些@Component是我希望關閉的後臺線程(通過調用其@Predestroy),否則他們在後臺執行的工作將導致其他測試類中的後續測試失敗。

我試過添加@DirtiesContext(classMode=ClassMode.AFTER_CLASS)但它沒有幫助。

編輯:想通了這個問題,我必須做一個額外的步驟,使DirtiesContext工作: Does Spring @DirtiesContext reload Spring context?

回答

5

SpringJUnit4ClassRunner有一個特點:它緩存全部開工情況和只有在所有的運行結束破壞它們測試用例。原因在於,通常新的春天環境開始可能需要幾秒鐘,這顯着增加了整個套件所需的時間。

所以,如果你真的需要這個,你可能應該擴展SpringJUnit4ClassRunner,並使其不緩存上下文。我想這個跑步者可能已經有這樣的功能,但不幸的是我現在無法檢查。嘗試檢查其代碼。這並不複雜,你可能會很快找到解決方案。

編輯:

只是@DirtiesContext標註的測試用例。詳情請看here

相關問題