Mockito when-thenReturn with SharedPreference值

时间:2018-12-19 18:26:59

标签: android unit-testing mockito

我正在与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)
}

感谢您的帮助(耐心等待,我会努力!)。

1 个答案:

答案 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