1
1

More than 3 years have passed since last update.

【Spring】コントローラの例外出力テスト

Posted at

リクエストを受け付けるコントローラのテストは基本的にMockMvcを使って書くことが多い。
例外を出力をさせる場合、その例外出力のテストはorg.assertj.core.api.Assertions.assertThatThrownByで実装できる。

プロダクトコード

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @GetMapping(value = "exception")
    public void throwException() {
        throw new IllegalStateException("例外です");
    }
}

テストコード


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class TestControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void throwExceptionTest() {
        assertThatThrownBy(() ->
                mockMvc.perform(get("/exception"))
        ).hasCause(new IllegalStateException("例外です"));
    }
}

.hasCauseを使えば例外の中身を検証できる。

参考

assertThatThrownBy(リファレンス)
How to prevent NestedServletException when testing Spring endpoints?(stack overflow)

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1