“什么时候”在Kotlin中是什么意思?

时间:2018-08-22 19:05:05

标签: unit-testing kotlin mockito

我在Kotlin中为Android创建的单元测试中看到了这样的代码

`when`(context.getSharedPreferences(anyString(), anyInt())).thenReturn(sharedPreferences)

您能解释一下为什么when位于``吗?如果我在when周围删除``,我看到一个问题,thenReturn无法解决。

2 个答案:

答案 0 :(得分:4)

when是Kotlin中的关键字,正如when expression中使用的那样。在Mockito中,有一个静态函数,也称为when。之所以会发生这种情况,是因为when在Java中不是关键字,因此可用于标识符命名。

反引号是special syntax,使得这些Java中定义的函数仍然可以从Kotlin调用。

Ps。您可能想研究一下mockito-kotlin,它在Kotlin中使与Mockito相关的一些任务更简单,例如,将when函数重命名为whenever,以便于调用和更好地使用。

答案 1 :(得分:1)

如果您不想像已接受的答案中所建议的那样依赖于另一个第三方库,则可以看一下BDDMockito(已经是Mockito的一部分)了。这基本上只是改变了您使用Mockito编写测试的样式,并且碰巧提供了Kotlin友好的函数名,不需要像when那样转义:

//Given
given(calcService.add(20.0,10.0)).willReturn(30.0);

//when
double result = calcService.add(20.0,10.0);

//then
Assert.assertEquals(result,30.0,0);