Junit5でのテストコードの覚書

今日一日はまったので、覚書。

Junit5Controller.java

@Controller
public class Junit5Controller {

    @RequestMapping("/Junit5")
    public @ResponseBody String greeting() {
        return "Hello, World";
    }
}

@SpringBootTest
@AutoConfigureMockMvc
class Junit5ControllerTest {
    @Autowired
    private MockMvc mockMvc;
    @Test
    public void shouldReturnDefaultMessage() throws Exception {
        this.mockMvc.perform(get("/Junit5")).andDo(print())
        .andExpect(content().string(containsString("Hello, World")));
    }
}

@WebMvcTestではエラーが出る。

1. 依存関係の挿入


インターフェイスを作成し使用した場合。

@SpringBootTest
@AutoConfigureMockMvc
class Test010ControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Autowired
    private JdbcTemplate jdbcTemplate;

    @MockBean
    private IndexListDao service;

    @Test
    void test() throws Exception {
        String sql = "SELECT * FROM index_list WHERE screen_id='Test001'";
        IndexListDto dto = jdbcTemplate.queryForObject(sql, new IndexRowMapper());
        when(service.findByScreenId("Test010")).thenReturn(dto);
        this.mockMvc.perform(get("/Test010"))
        .andExpect(status().isOk()).andExpect(content().string(containsString("Test001")));
    }

}

このコードでは、モックにより、screenIdを書き換えている。

when(service.findByScreenId("Test010")).thenReturn(dto);の部分で、”Test010”以外にするとエラーになる。