Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 在科特林,“when”是什么意思?_Unit Testing_Kotlin_Mockito - Fatal编程技术网

Unit testing 在科特林,“when”是什么意思?

Unit testing 在科特林,“when”是什么意思?,unit-testing,kotlin,mockito,Unit Testing,Kotlin,Mockito,我在Kotlin中创建的Android单元测试中看到这样的代码 `when`(context.getSharedPreferences(anyString(), anyInt())).thenReturn(sharedPreferences) 你能解释一下为什么在``里面吗?如果我在时删除``around,我会看到一个问题,然后返回无法解决。当在Kotlin中是一个关键字时,因为它在。在Mockito中,有一个静态函数也被称为。之所以会发生这种情况,是因为在Java中不是关键字,所以它可用于标

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

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

你能解释一下为什么
在``里面吗?如果我在
时删除``around
,我会看到一个问题,
然后返回
无法解决。

在Kotlin中是一个关键字时,因为它在。在Mockito中,有一个静态函数也被称为。之所以会发生这种情况,是因为
在Java中不是关键字,所以它可用于标识符命名

反向标记使这些在Java中定义的函数仍然可以从Kotlin调用


另外,您可能想了解一下,它使Kotlin中与Mockito相关的两个任务变得更简单,例如,它将
when
函数重命名为
whenwhere
,这样调用起来更容易、更方便。

如果您不想像公认答案中建议的那样依赖另一个第三方库,您可能想看看(已经是Mockito的一部分了)。这基本上只是改变了您使用Mockito编写测试的风格,并且碰巧提供了Kotlin友好的函数名,而不需要像
时那样转义:

//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); 

反勾号是一种特殊的语法,使得Java中定义的这些函数仍然可以从Kotlin调用。
-但不仅仅是这样。它们也可以在Kotlin中调用以转义通常非法的字符。例如,
***
不编译,但
`**
是。尽管使用非保留的ke通常比较容易YWORD和受支持的名称,在某些情况下可以在函数声明中使用反勾号(即
fun`**`(something:Any)