使用Spring boot 1.4错误对ZonedDateTime进行集成测试

时间:2016-10-22 10:23:01

标签: spring spring-boot integration-testing jhipster

我的测试用例无法进行ZonedDateTime测试,我已经被这个错误困住了几个小时,我正在使用JHipster generator 3.9.1

这是定义测试中使用的日期的方式:

private static final ZonedDateTime DEFAULT_DATE = ZonedDateTime.ofInstant(Instant.ofEpochMilli(0L), ZoneId.systemDefault());
private static final String DEFAULT_DATE_STR = DateTimeFormatter.ISO_OFFSET_DATE_TIME.format(DEFAULT_DATE);

然后在测试方法中:

@Test
@Transactional
public void searchMeal() throws Exception {
    // Initialize the database
    mealService.save(meal);

    // Search the meal
    restMealMockMvc.perform(get("/api/_search/meals?query=id:" + meal.getId()))
        .andExpect(status().isOk())
        .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
        .andExpect(jsonPath("$.[*].id").value(hasItem(meal.getId().intValue())))
        .andExpect(jsonPath("$.[*].title").value(hasItem(DEFAULT_TITLE)))
        .andExpect(jsonPath("$.[*].description").value(hasItem(DEFAULT_DESCRIPTION)))
        .andExpect(jsonPath("$.[*].picture").value(hasItem(DEFAULT_PICTURE)))
        .andExpect(jsonPath("$.[*].date").value(hasItem(DEFAULT_DATE_STR)));
}

出现错误:

java.lang.AssertionError: JSON path "$.[*].date"
Expected: a collection containing "1970-01-01T01:00:00+01:00"
 but: was "1970-01-01T00:00:00.000Z"

测试类定义使用Spring boot 1.4注释:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = NutrilifeApp.class)
public class MealResourceIntTest {

使用Spring Boot测试ZonedDateTime的最佳/有效方法是什么?

1 个答案:

答案 0 :(得分:1)

经过一番调查后,我决定按照上面的@dunni提出的解决方案,将测试数据改为使用UTC,代码改为:

private static final ZonedDateTime DEFAULT_DATE = ZonedDateTime.ofInstant(Instant.ofEpochMilli(0L), ZoneOffset.UTC);
private static final String DEFAULT_DATE_STR = DateTimeFormatter.ISO_INSTANT.format(DEFAULT_DATE);

现在测试正在通过。出于某种原因,JHipster生成器使用系统默认时区(ZoneId.systemDefault())为生成的实体添加测试,这会导致使用ZonedDateTime的测试失败。