这听起来像是一个非常简单的问题,但是我真的很难将解决方案存档。
通常我会很轻松地嘲笑和匹配我的论点。
现在我正在匹配一个像这样的方法:
getAppFacebookClient(page, V2_11).publish(destination, JsonObject.class, parameters.asArray());
这是用于facebook应用程序,参数是自定义对象的列表。 asArray []方法是在类中创建的,基本上可以执行以下操作:
public Parameter[] asArray() {
return parameters.toArray(new Parameter[parameters.size()]);
}
,此返回的参数类型为com.restfb.Parameter
所以,我基本上是这样做的
when(client.publish(anyString(), eq(JsonObject.class), any(com.restfb.Parameter[].class))).thenReturn(result)
;
但似乎从未使用过,当然我也无法操纵结果,
有什么主意我该如何以适当的方式模拟这种对象?
我也尝试了另一种方式
doReturn(result).when(client).publish(anyString(), eq(JsonObject.class), any(com.restfb.Parameter[].class));
答案 0 :(得分:1)
您的代码是正确的...除非publish
使用varargs!
在这种情况下,您需要使用any()
/ anyVararg()
匹配器。
考虑:
@Mock Thingy testee;
interface Thingy {
int f(String... arg);
}
@Test
public void test() {
// given
// works only if signature is `f(String[] arg)`
// when(this.testee.f(Mockito.any(String[].class))).thenReturn(42);
when(this.testee.f(Mockito.any())).thenReturn(42); // anyVararg() is deprecated
// when
final int result = this.testee.f(new String[] { "hello", "world" });
// then
assertThat(result, comparesEqualTo(42));
// works only if signature is `f(String[] arg)`
// verify(this.testee).f(Mockito.any(String[].class));
verify(this.testee).f(Mockito.any());
}