我正在与Mockito一起进行单元测试的第一次深入研究,所以请多多包涵。我正在进行此测试:
class PasswordStateManagerTest {
private lateinit var passwordStateManager: PasswordStateManager
@MockK
private lateinit var mockContext: Context
@MockK
private lateinit var mockSharedPreferences: SharedPreferences
@Before
fun setup() {
MockKAnnotations.init(this, true)
every{ mockContext.getApplicationSharedPreferences() } returns mockSharedPreferences
// this is the line that won't compile
Mockito.when(mockSharedPreferences.getBoolean("save_password", false)
)
.thenReturn(true)
passwordStateManager = PasswordStateManager(mockSharedPreferences)
}
}
when.thenReturn行不会编译。我期望在{
上执行的括号.thenReturn
处出现字符。当我阅读文档时,在此声明中没有空括号的位置,因此我必须脱节。
这是要测试的类的init方法的一部分,这就是对测试中的when-thenReturn行的需求:
init {
willSavePassword = prefs.getBoolean("save_password", false)
}
感谢您的帮助(耐心等待,我会努力!)。
答案 0 :(得分:0)
这是因为when
是Kotlin中的保留关键字,因此编译器将其解释为when
语句的开始。例如:
when (value) {
"value1" -> // do thing
}
要解决此问题,您可以使用反引号对方法名称进行转义:
Mockito.`when`(mockSharedPreferences.getBoolean("save_password", false)).thenReturn(true);
或者,由于您仍在使用MockK,因此只需切换到另一个every
:
every { mockSharedPreferences.getBoolean("save_password", false) } returns true