使用Spring MockMvc对缓和服务进行集成测试(忽略json内容响应中的ID或其他字段)

时间:2017-09-01 09:49:17

标签: java spring spring-mvc integration-testing spring-mvc-test

我为我的应用程序创建了工作集成测试:

@Test
public void postCalendar() throws Exception {
    User actualUser = createUser();
    actualUser = userRepository.save(actualUser);
    String externalId = randomUUID().toString();
    Account account = new Account(actualUser, Provider.CUSTOM_PROVIDER, actualUser.getEmail(), externalId);
    accountRepository.save(account);
    Calendar expectedCalendar = createCalendarWithAccount(account);
    mvc.perform(MockMvcRequestBuilders.post("/calendar").contentType(V1_0)
            .content(toJSON(createCalendarDto(expectedCalendar))))
            .andExpect(status().isOk())
            .andExpect(content().contentTypeCompatibleWith(V1_0))
            .andExpect(jsonPath("$.id", is(notNullValue())))
            .andExpect(jsonPath("$.name", is(expectedCalendar.getName())))
            .andExpect(jsonPath("$.title", is(expectedCalendar.getTitle())))
            .andExpect(jsonPath("$.description", is(expectedCalendar.getDescription())))
            .andExpect(jsonPath("$.color", is(expectedCalendar.getColor())))
            .andExpect(jsonPath("$.email", is(expectedCalendar.getEmail())))
            .andExpect(jsonPath("$.primary", is(expectedCalendar.isPrimary())));
}

现在看起来工作正常。在我的第一个版本中没有传递,因为ID字段不存在,但我想使用这种测试方式(下一个测试示例不起作用,它需要忽略id个字段):< / p>

@Test
public void postCalendar() throws Exception {
    User actualUser = createUser();
    actualUser = userRepository.save(actualUser);
    String externalId = randomUUID().toString();
    Account account = new Account(actualUser, Provider.CUSTOM_PROVIDER, actualUser.getEmail(), externalId);
    accountRepository.save(account);
    Calendar expectedCalendar = createCalendarWithAccount(account);
    mvc.perform(MockMvcRequestBuilders.post("/calendar").contentType(V1_0)
            .content(toJSON(createCalendarDto(expectedCalendar))))
            .andExpect(status().isOk())
            .andExpect(content().contentTypeCompatibleWith(V1_0))
            .andExpect(content().json(toJSON(expectedCalendar)));
}

如果我的dto发生了变化 - 我不应该关心改变测试标准,因为所有的json都会被比较。

是否可以通过指令来修复此超级测试以忽略某些字段(例如id)?我如何在此处声明忽略内部对象中的某些字段(id以获取嵌套集合中可以在创建日历内容中的对象?)

0 个答案:

没有答案