我正在使用Spring Boot 1.5.1構建非常基本的Web應用程序,並希望創建用於檢查REST端點的集成測試。根據文檔建議,可以使用MockMvc。Spring Boot集成測試:@AutoConfigureMockMvc和上下文高速緩存
這是非常簡單的測試類:
package foo.bar.first;
import ...
@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class ApplicationTest1 {
@Autowired
private WebApplicationContext context;
@Autowired
private MockMvc mvc;
@Test
public void shouldStartWebApplicationContext() {
assertThat(context).isNotNull();
}
@Test
public void shouldReplyToPing() throws Exception {
mvc.perform(get("/ping"))
.andExpect(status().isOk());
}
}
正如預期的那樣,它開始全面應用環境和運行測試。
後來我創建了其他類似的測試類,發現品牌新的應用程序上下文啓動時爲每個測試類。實驗表明,上下文僅在來自相同包的測試類之間共享。
例如,如果同一測試類複製多次,然後上下文如下:
foo.bar
first
ApplicationTest1 (shared context)
ApplicationTest2 (shared context)
second
ApplicationTest3 (brand new context)
而且進一步研究表明,它與@AutoConfigureMockMvc
註釋。如果註釋和MockMvc相關的測試用例被刪除,那麼所有三個類成功共享共享相同的上下文。
所以問題是如何獲得共享上下文的所有測試與MockMvc?
注意:其他資源建議使用MockMvcBuilders.webAppContextSetup(context).build()
獲取MockMvc實例,但它不適用於我(它不涉及處理Web請求時的過濾器)。
我有完全相同的問題。我發現的唯一解決方法是不使用'mockMvc'並使用'TestRestTemplate',這絕對不是一個好的解決方案。 –
這個答案可能會有所幫助。 https://stackoverflow.com/a/41051585/1849366https://stackoverflow.com/a/41051585/1849366 –
您是否嘗試過在基類中設置mockmvc,併爲每個測試套件擴展該類?我也很好奇爲什麼你需要測試來分享上下文?'我喜歡[這個設置](https://spring.io/blog/2016/08/30/custom-test-slice-with-spring-boot -1-4)在spring.io博客中報道。獨立測試每個控制器。 –