【发布时间】:2017-05-19 09:58:29
【问题描述】:
与这段 Java 代码等效的 Kotlin 是什么?
doAnswer(new Answer() {
@Override
public Object answer(InvocationOnMock invocation) throws Throwable {
Design design = new Design();
GetDesign.Listener callback = (GetDesign.Listener) invocation.getArguments()[0];
callback.onSuccess(design);
return null;
}
}).when(someRepository).getDesign(any(GetDesign.Listener.class));
[更新] 在尝试了几个选项后,我终于使用mockito-kotlin 使它工作。我认为这是实现doAnswer 的最舒适的方式。语法几乎保持不变:
doAnswer {
callback = it.arguments[0] as GetDesign.Listener
callback.onSuccess(Design())
null
}.whenever(someRepository).execute(any(GetDesign.Listener::class.java))
完整的代码和build.gradle配置可以找到here
【问题讨论】:
-
注意:我建议查看这些 Kotlin Mockito 绑定:github.com/nhaarman/mockito-kotlin。他们给你一堆很酷的东西(例如
whenever而不是`when`)。 -
我看过了,但它适用于 Kotlin 1.1.1 吗?
-
我猜您需要进行 SAM 转换。见这里:kotlinlang.org/docs/reference/java-interop.html#sam-conversions
-
在我的机器上工作:)
-
使用 mockito-kotlin 让它也能工作。试图让它以“原始方式”工作,一旦我得出一些结论,就会更新答案