web-dev-qa-db-ja.com

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));
}
_

is(500)isOk()に置き換えても合格です。そして、これは良くありません、私はその例外をどうにかしてチェックする必要があります。

_gradle build_を実行すると、次のようになります。

_org.springframework.web.util.NestedServletException: Request processing failed; nested exception is Java.lang.IllegalArgumentException
_
10
tzortzik

ここのようなカスタムExceptionHandlerを使用しようとしましたか? : https://spring.io/blog/2013/11/01/exception-handling-in-spring-mvc

その場合、カスタムHTTP応答コードを返し、テストでそれらを確認できます。

7
mrkernelpanic