小编Vys*_*rat的帖子

使用Mockito匹配一组对象

我正在尝试为一个获取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(),但这要求我指定数组的确切内容,我宁愿不这样做.

java mocking mockito

13
推荐指数
2
解决办法
3万
查看次数

杰克逊在反序列化到JodaTime时失去了与日期相关的时间

我正在尝试使用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

java json jodatime jackson

7
推荐指数
2
解决办法
4557
查看次数

标签 统计

java ×2

jackson ×1

jodatime ×1

json ×1

mocking ×1

mockito ×1