代码之家  ›  专栏  ›  技术社区  ›  Krzysztof Majewski

spring mockmvc-从rest获取java.time.instant

  •  2
  • Krzysztof Majewski  · 技术社区  · 7 年前

    我有一个资源,它返回一个对象 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 此格式的日期?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Krzysztof Majewski    6 年前

    我通过定制匹配器找到了解决方案:

    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);
        }
    }
    

    IT工厂:

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

    用途:

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