我第一次深入研究了与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)
}
}
何时不会汇编。它期望我试图在.thenReturn
上执行一个打开的括号{
字符。当我阅读文档时,在此语句中没有任何开放式括号的地方,所以我必须离开轨道。
这是要测试的类的初始方法的一部分,这是对测试中的全部延伸线的需求:
:init {
willSavePassword = prefs.getBoolean("save_password", false)
}
感谢您的任何帮助(以及我迅速提高速度的耐心!)。
这是因为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