Mockito when-thenReturn со значением SharedPreference - PullRequest
0 голосов
/ 19 декабря 2018

Я делаю свое первое глубокое погружение в модульное тестирование с 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 голосов
/ 19 декабря 2018

Это потому, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...