Spring MVC控制器测试失败 - 未设置内容类型

时间:2015-01-10 17:28:38

标签: java spring-mvc testing gradle

当我将应用程序表单Maven(Eclipse)移动到Gradle(InteliJ)时,我的所有控制器测试都停止了工作。测试正在使用Maven进行旧的应用程序。

我的控制器方法:

@RequestMapping(value = "submit", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody FormResponse submitForm(@RequestBody TagData form) {
    try {
        tagService.saveTag(form);
    } catch (BusinessException ex) {
        return FormResponse.error(ex);
    }
    return FormResponse.success("admin.tag.saved");
}

我的测试:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/pl/dk/web/controllers/controllers-test-context.xml"})
@WebAppConfiguration
public class TagControllerTest {

    @Autowired
    TagController controller;

    @Autowired
    WebApplicationContext webContext;

    @Autowired
    TagManagerService tagService;

    private MockMvc mockMvc;

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webContext).build();
        EasyMock.reset(tagService);
    }

      @Test
public void testSave() throws Exception {
    TagData form = new TagData();
    form.setName("Test tag");
    form.setDescription("Test description");

    EasyMock.expect(tagService.saveTag(form)).andReturn(1L);
    controller.tagService = tagService;

    RequestBuilder reqBuilder = MockMvcRequestBuilders.post("/admin/recipes/tag/submit")
            .contentType(MediaType.APPLICATION_JSON)
            .accept(MediaType.APPLICATION_JSON)
            .content(TestUtil.convertObjectToString(form));

    MvcResult result = mockMvc.perform(reqBuilder)
            .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON))
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andReturn();
    Assert.assertNotNull(result);
}
}

在我最糟糕的情况下,这个问题可能与InteliJ与gradle或其他东西的集成有关,我在这里与鬼魂作斗争。任何人都可以帮我这个吗?

我的错误:

java.lang.AssertionError: Content type not set

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,虽然对我来说不是那么明显。问题与杰克逊图书馆有关。当我申请

testCompile 'com.fasterxml.jackson.core:jackson-databind:2.3.1'

而不是

testCompile 'org.codehaus.jackson:jackson-mapper-asl:1.9.13'
testCompile 'org.codehaus.jackson:jackson-core-asl:1.9.13'
所有人都开始工作了。