実コードのSpring設定に、テスト実行用のSpring設定が反映されていないのが原因かと思われます。
具体的には、StringをLocatDateに自動変換するクラスが設定用のクラス( @Configuration が付与されたクラス)にて宣言されているのですが、このクラスがテスト用のSpring設定に組み込まれていないのではないでしょうか。
例えば、
java
1import org.springframework.context.annotation.Configuration;
2import org.springframework.format.FormatterRegistry;
3import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
4
5@Configuration
6public class WebConfig implements WebMvcConfigurer {
7 @Override
8 public void addFormatters(FormatterRegistry registry) {
9 registry.addConverter(new StringToLocalDate());
10 }
11}
java
1import java.time.LocalDate;
2import java.time.format.DateTimeFormatter;
3
4import org.springframework.core.convert.converter.Converter;
5
6public class StringToLocalDate implements Converter<String, LocalDate> {
7
8 @Override
9 public LocalDate convert(String source) {
10 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/M/d");
11 return LocalDate.parse(source, formatter);
12 }
13
14}
が宣言されていた場合、SpringMvcのControllerクラスで適用するには以下のように @Import
を用いて直接設定するか、テスト用のContextを用意してそれを適用します。
java
1import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
2import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;
3
4import org.junit.Test;
5import org.junit.runner.RunWith;
6import org.springframework.beans.factory.annotation.Autowired;
7import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
8import org.springframework.context.annotation.Import;
9import org.springframework.test.context.junit4.SpringRunner;
10import org.springframework.test.web.servlet.MockMvc;
11
12import com.github.apz.config.WebConfig;
13import com.github.apz.config.WebjarsConfig;
14
15@RunWith(SpringRunner.class)
16@WebMvcTest(SampleModelController.class)
17@Import({WebConfig.class, WebjarsConfig.class})
18public class SampleModelControllerTest {
19 @Autowired
20 MockMvc mockMvc;
21
22 @Test
23 public void sampleExecute() throws Exception {
24 mockMvc.perform( get("/sample").param("birthday", "2019/1/3"))
25 .andExpect(status().isOk());
26 }
27
28}
29