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が帰ってくる
    }

まとめ

よく分からず、適当なコードを書いたら直ってしまった回・・・ 挙動の違いはまた今度見てみます。

この辺が影響してそう。