【问题标题】:Spring MockMvc - getting java.time.Instant from RESTSpring MockMvc - 从 REST 获取 java.time.Instant
【发布时间】:2018-06-08 11:48:17
【问题描述】:

我有一个资源返回给我一个具有java.time.Instant 属性的对象。

class X {
    ...
    private Instant startDate;
    ...
}

我正在测试它:

    mockMvc.perform(get("/api/x"))
        .andExpect(status().isOk())
        .andExpect(jsonPath("$.content.[*].startDate").value(hasItem(MY_INSTANT_DATE)));

但我从 JUnit 得到的是:

Expected: a collection containing <2018-06-08T11:46:50.292Z> but: was <1528458378.397000000>

如何将我的Instant 日期映射到这种格式?

【问题讨论】:

    标签: java json spring-mvc junit mockmvc


    【解决方案1】:

    我通过制作自定义 Matcher 找到了解决方案:

    class DateEquals extends BaseMatcher<Integer> {
    
        private final Date expectedValue;
    
        DateEquals(Date equalArg) {
            expectedValue = equalArg;
        }
    
        @Override
        public boolean matches(Object item) {
            Long dateTimeMillis = (Long) item;
            return dateTimeMillis.equals(toEpochMillis(expectedValue));
        }
    
        @Override
        public void describeTo(Description description) {
            description.appendValue(" equals to date: " + expectedValue);
        }
    }
    

    它的工厂:

    public class CustomMatchersFactory {
        public static Matcher dateEquals(Date date) {
            return is(new DateEquals(date));
        }
    }
    

    及用法:

    .andExpect(jsonPath("$.content.[*].startDate", dateEquals(MY_INSTANT_DATE)));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-12
      • 2019-10-13
      • 2020-05-03
      • 2018-10-04
      • 1970-01-01
      • 2021-08-13
      • 1970-01-01
      • 2019-06-15
      相关资源
      最近更新 更多