当使用Mockito和Kotlin时,只允许在类字面值的左侧使用类。

6

我使用了Android Studio的转换工具来将现有的Java测试类进行转换。

我遇到了以下错误:

只有类可以出现在类文字的左侧

这是使用的测试用例:

Java

doAnswer(answerVoid(
            (OnDataListListener<List<BEntity>> myCallback) -> myCallback.onSuccess(mList))).when(
            mInteractor).performGetBList(any(OnDataListListener.class), anyBoolean());

Kotlin

doAnswer(answerVoid { listener: OnDataListListener<List<BEntity>> ->
      listener.onSuccess(
          emptyList())
    }).`when`<DragonInteractor>(mInteractor)
        .performGetBList(any<OnDataListListener>(OnDataListListener<*>::class.java),
            anyBoolean())

所以在这种情况下如何使用通用参数?谢谢。
2个回答

5

只需使用 OnDataListListener::class.java

类引用表达式中不需要(也不允许)使用尖括号的原因是类引用完全不涉及泛型,没有不同的类引用可以表示一个类的泛型特化。


2
这里的“any”怎么样:any<*>(OnDataListListener::class.java)。我甚至有这个,但仍然无法编译:https://dev59.com/vVwY5IYBdhLWcg3wQ12k#32827711 - Mohamed ALOUANE
@MohamedALOUANE,应该只是any(OnDataListListener::class.java)吗?如果无法编译,请尝试any<OnDataListListener<*>>(OnDataListListener::class.java) - hotkey

0

首先移除 OnDataListListener<*>::class.java 参数,然后在 OnDataListListener 参数类型中添加 List<BEntity>

结果如下:

doAnswer(answerVoid { listener: OnDataListListener<List<BEntity>> ->
  listener.onSuccess(
      emptyList())
}).`when`<DragonInteractor>(mInteractor)
    .performGetBList(any<OnDataListListener<List<BEntity>>>(),
        anyBoolean())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接