我正在编写Spring MVC 4.2.x REST控制器的单元测试,并且遇到Jackson(2.6.x)序列化的日期问题。在运行应用程序时,日期(java.util.Date
)默认以yyyy-MM-dd
格式序列化(无需额外配置),这就是我想要的。
但是,在测试期间,由于未知原因,日期会被序列化为时间戳。
以下是测试类的一些示例代码:
public class OrderControllerTest {
@Mock
private OrderService service;
@InjectMocks
private OrderController controller;
private MockMvc mockMvc;
private List<Order> orders = new ArrayList<>();
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
// Initialize dummy order list
orders.add(...);
orders.add(...);
orders.add(...);
}
@Test
public void list() throws Exception {
// Stub the service find method
when(service.find(asOfDate, null)).thenReturn(orders);
// Run the controller and check the result
MvcResult result =
mockMvc
.perform(get("/admin/order/"))
.andExpect(status().isOk())
.andExpect(content().contentType(TestUtil.APPLICATION_JSON_UTF8))
.andExpect(jsonPath("$[0].startDate", is(SOME_DATE)))
.andReturn();
System.out.println(result.getResponse().getContentAsString());
}
所以在这里我看到返回的日期都是时间戳。
Surefire输出:
Expected: is <Thu Jan 01 00:00:00 CET 2015>
but: was <1420066800000L>
我错过了什么吗?为什么默认的序列化格式与运行应用程序和运行测试不同?