2015-04-12 36 views
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 
+0

當控制器拋出這樣的異常時,你期望得到什麼樣的HTTP響應?我希望有一個錯誤500.如果這是你所期望的,那麼這就是你的測試應該驗證的。如果您希望發生另一個錯誤(錯誤400會更合適),那麼測試一下您在測試中會遇到這樣的錯誤,並修復代碼直到測試通過。 –

+0

我已經試過期望500錯誤,但它不起作用,因爲它會在拋出錯誤時停止執行。 – tzortzik

+0

我更新了我的初始帖子。發生了一些奇怪的事情 – tzortzik

回答