我正在尝试为一个获取Request对象数组的方法设置一个mock:
client.batchCall(Request[])
Run Code Online (Sandbox Code Playgroud)
我尝试过这两种变化:
when(clientMock.batchCall(any(Request[].class))).thenReturn(result);
...
verify(clientMock).batchCall(any(Request[].class));
Run Code Online (Sandbox Code Playgroud)
和
when(clientMock.batchCall((Request[])anyObject())).thenReturn(result);
...
verify(clientMock).batchCall((Request[])anyObject());
Run Code Online (Sandbox Code Playgroud)
但我可以告诉我们没有调用嘲笑.
它们都会导致以下错误:
Argument(s) are different! Wanted:
clientMock.batchCall(
<any>
);
-> at com.my.pkg.MyUnitTest.call_test(MyUnitTest.java:95)
Actual invocation has different arguments:
clientMock.batchCall(
{Request id:123},
{Request id:456}
);
Run Code Online (Sandbox Code Playgroud)
为什么匹配器与阵列不匹配?我需要使用一个特殊的匹配器来匹配一个对象数组吗?我能找到的最接近的是AdditionalMatches.aryEq(),但这要求我指定数组的确切内容,我宁愿不这样做.
我正在尝试使用Jackson序列化然后反序列化Joda DateTime对象,但它不会完全反序列化该对象.看起来时区信息丢失了.
这段代码:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JodaModule());
mapper.configure(com.fasterxml.jackson.databind.SerializationFeature.WRITE_DATES_AS_TIMESTAMPS , false);
DateTime dt = DateTime.now();
String j = mapper.writeValueAsString(dt);
DateTime dt2 = mapper.readValue(j, DateTime.class);
System.out.println("json: " + j);
System.out.println("eq? " + (dt.equals(dt2)));
System.out.println("dates:\n" + dt + "\n" + dt2);
Run Code Online (Sandbox Code Playgroud)
输出:
json: "2013-10-18T14:10:52.458-07:00"
eq? false
dates:
2013-10-18T14:10:52.458-07:00
2013-10-18T21:10:52.458Z
Run Code Online (Sandbox Code Playgroud)
这是设计的吗?除了编写自己的序列化器/解串器之外,还有什么我可以做的吗?我在SO上看到了一些关于这个的问题,但没有一个具体涉及这方面.
我正在使用Joda 2.1和Jackson 2.1