7
我正在使用MockMVC來測試我的控制器。如何用mockmvc處理控制器異常
我有以下控制器:
public class A{
...
@RequestMapping("/get")
public List<ADTO> get(@RequestParam(defaultValue = "15", required = false) Integer limit) throws IOException {
if(limit <= 0 || limit >= 50){
throw new IllegalArgumentException();
}
...
return aDTOs;
}
}
而我目前的測試看起來像這樣:
@Test
public void testGetAllLimit0() throws Exception {
mockMvc.perform(get("/A/get")
.param("limit","0")
)
.andDo(print())
.andExpect(...);
}
我這個實例MockMVC:
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
}
我怎麼能走關心在我的控制器中拋出的異常?
後來編輯:
我不知道在我的代碼發生了什麼事,但最近它通過測試:
@Test
public void testGetAllLimit0() throws Exception {
mockMvc.perform(get("/A/get")
.param("limit","0")
)
.andDo(print())
.andExpect(status().is(500));
}
如果我isOk()
取代is(500)
它仍然通過。這不好,我應該檢查一下這個例外。
如果我運行一個gradle build
我得到這個:
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException
當控制器拋出這樣的異常時,你期望得到什麼樣的HTTP響應?我希望有一個錯誤500.如果這是你所期望的,那麼這就是你的測試應該驗證的。如果您希望發生另一個錯誤(錯誤400會更合適),那麼測試一下您在測試中會遇到這樣的錯誤,並修復代碼直到測試通過。 –
我已經試過期望500錯誤,但它不起作用,因爲它會在拋出錯誤時停止執行。 – tzortzik
我更新了我的初始帖子。發生了一些奇怪的事情 – tzortzik