集成測試時(shí) MockMvc 無法注入
如果閱讀過 使用 Junit 編寫單元測試[1] 的小伙伴都知道,在寫對 Controller 進(jìn)行單元測試時(shí),會將 Service 層進(jìn)行 Mock。
大概樣子如下:

但是除了單元測試,還需要寫集成測試,就是模擬全流程的請求。
集成測試同樣使用的是 MockMvc,但是如果像單元測試一樣加上 @WebMvcTest 就不太可以,因?yàn)?Service 代碼沒有 mock 掉,就會報(bào)錯(cuò)。

可以用以下兩種方式解決該問題:
方法一
移除 @Autowired 注解,并手動聲明 MockMvc。
在 @Before 中使用 MockMvcBuilders.webAppContextSetup 即可手動聲明 MockMvc。
@WebAppConfiguration
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserInfoControllerTest {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
// ... 省略
}
方法二
使用 @AutoConfigureMockMvc 注解,這樣就可以使用 @Autowired 即可注入 MockMvc 對象。
@WebAppConfiguration
@AutoConfigureMockMvc(addFilters = false)
@RunWith(SpringRunner.class)
@SpringBootTest
public class AccessRecordControllerTest {
@Autowired
private MockMvc mockMvc;
// ... 省略
}
注意:
需要添加 addFilters = false 否則可能會導(dǎo)致走 AntBuservice 過濾器,導(dǎo)致需要登錄,從而集成測試失敗
近期在開發(fā)中寫單元測試比較多,并且在寫單元測試時(shí)也遇到不少問題,以及總結(jié)了一些心得,后續(xù)會總結(jié)相關(guān)文章。
引用鏈接:
使用 Junit 編寫單元測試: https://mp.weixin.qq.com/s/HUhWUk01ICZ5ppwHhcc8ZA
- <End /> -
評論
圖片
表情
