与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()将是 red (我认为这取决于配色方案,但是您会得到这个想法 - 一个问题:未解决的参考

要解决这个问题,我只需在此行之前包括此行:

val mockInterface = mockObj as IMyInterface

模拟接口将是灰色的凸出下划线的,因为它是从未使用过的。我仍然将mockObj用于when

但是,这使得 red 消失

我不确定为什么这有效...有人可以解释理论吗?

要摆脱灰色下划线,然后删除val mockInterface =

所以我的魔术线简化为 mockObj as IMyInterface

mock(MyClass::class.java)的返回类型是 MyClass。返回的对象也是Imyinterface的一个实例,因为您要求摩索哥摩擦,但是Kotlin编译器不知道。

mockObj as IMyInterface告诉Kotlin编译器将MOCKOBJ投射到Imyinterface。由于Kotlin编译器支持Smart Casts,因此它知道,如果此行没有引发任何异常,则mockObj是Imyinterface的一个实例。因此,它使您可以致电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
}

相关内容

  • 没有找到相关文章

最新更新