Spring 5.0/Spring Boot 2.0にしたらMockMvcを使ったテストが406 Not Acceptableを返してくる話
Content-Type周りの挙動で死んでしまった回
使っているSpringは5.1.0、Spring Bootは2.0.6です。
元はこんなコード。
@Before public void setUp() { this.mockMvc = MockMvcBuilders.standaloneSetup(controller) .setMessageConverters(httpMessageConverter()); } @Test public void testGetMailSuppression() throws Exception { // setup String someId = ...; // 省略 // exercise mvc.perform(get("/endpoint/{id}", someId) // verify .andExpect(status().isOk()); // なぜか406が帰ってくる }
ContentNegotiationManager周りに変更が入っているので、以下のコードを追加しました。
@Before public void setUp() { + ContentNegotiationManagerFactoryBean factoryBean = + new ContentNegotiationManagerFactoryBean(); + factoryBean.setFavorPathExtension(false); // この辺の設定はWebMvcの設定で使ってるやつ + factoryBean.afterPropertiesSet(); this.mockMvc = MockMvcBuilders.standaloneSetup(controller) + .setContentNegotiationManager(factoryBean.build()) .setMessageConverters(httpMessageConverter()); } @Test public void testGetMailSuppression() throws Exception { // setup String someId = ...; // 省略 // exercise mvc.perform(get("/endpoint/{id}", someId) // verify .andExpect(status().isOk()); // なぜか406が帰ってくる }
まとめ
よく分からず、適当なコードを書いたら直ってしまった回・・・ 挙動の違いはまた今度見てみます。
この辺が影響してそう。