我的测试用例无法进行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的最佳/有效方法是什么?
答案 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的测试失败。