嘲笑与Kotlin和Mockito的接口

我不太了解Kotlin的界面模拟。 我不确定这是Kotlin特定还是适用于Java。 到目前为止,我只在Kotlin尝试过。

我有一个接口模拟类:

val mockObj = mock(MyClass::class.java, withSettings().extraInterfaces(IMyInterface::class.java) 

现在,这在IntelliJ中产生以下问题:

 `when`(mockObj.someMethod()).thenReturn(0.1) 

someMethod()将是红色的 (我认为这取决于配色方案,但是你得到的想法 – 一个问题: 未解决的参考

为了解决这个问题,我只是简单的把它包括在它之前:

 val mockInterface = mockObj as IMyInterface 

模拟接口将被灰色下划线,因为它从来没有使用过 。 我仍然使用mockObjwhen

然而,这使得红色消失

我不知道为什么这个作品…有人可以解释这个理论吗?

为了摆脱灰色的下划线,我然后删除val mockInterface =

所以我的魔术线减少到mockObj as IMyInterface

One Solution collect form web for “嘲笑与Kotlin和Mockito的接口”

mock(MyClass::class.java)的返回类型是MyClass 。 返回的对象也是IMyInterface的一个实例,因为你问到了Mockito,但是Kotlin编译器不知道。

mockObj as IMyInterface告诉Kotlin编译器将mockObj转换为IMyInterface。 由于Kotlin编译器支持智能转换 ,因此它知道如果该行不抛出任何异常,则mockObjmockObj的一个实例。 因此它可以让你调用someMethod() ,并为你插入必要的演员。

你可以用一个更简单的例子来复制这个:

 val foo: Any = "hello" val bar = foo as String println(foo.length) // smart cast added here 

您也可以使用is运算符来使编译器插入一个智能转换

 val foo: Any = "hello" if (foo is String) { println(foo.length) // smart cast added here } 
  • 使用Kotlin-Mokito库时java.lang.reflect.InvocationTargetException
  • 在Kotlin中可以使用Mockito吗?
  • 如何测试在Kotlin中调用顶层函数的代码?
  • Mockito从来没有()不工作,然后rxjava2
  • Kotlin中@BeforeAll的正确解决方法是什么?
  • 为什么$ MockitoMock $实例不被识别为模拟?
  • 测试Android Kotlin应用程序 - 用匕首Mockito注入null
  • Mockito可以在方法调用时根据它们的值validation参数吗?
  • sharedpreferences上的nullPointerException helper类运行测试时
  • 如何使用Mockito / PowerMockito来模拟Kotlin的对象?
  • 使用Mockito和InjectMocks时Kotlin懒惰块不执行
  • Kotlin language will be the best programming language for Android.