#android #kotlin #junit #mockito #sharedpreferences
Вопрос:
Я пишу тест Junit для общих предпочтений, но сталкиваюсь с проблемой ниже
Метод
public void storeUser(User user) { final SharedPreferences userPrefs = context.getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE); userPrefs.edit().putString(USER_ID_KEY, user.getUserID()).apply(); }
Класс Junit
class UserRepoTest { private lateinit var context: Context private lateinit var userRepo: UserRepo private lateinit var userPrefs: SharedPreferences private lateinit var editor: SharedPreferences.Editor @Before fun setup() { context = mock() userRepo = UserRepo(context) userPrefs = mock() editor = mock() } @Test fun `check mocked instances are not null`() { context assertNotEquals null userRepo assertNotEquals null } @Test fun `when store user then load user`() { whenever(context.getSharedPreferences(USER_PREFS, Context.MODE_PRIVATE)).thenReturn(userPrefs) whenever(userPrefs.edit()).thenReturn(editor) val user = getUser() verify(editor, times(1)).putString(USER_ID_KEY, user!!.userID).apply() // verify(userPrefs.edit(), times(1)).putString(USER_ID_KEY, user!!.userID).apply() userRepo.storeUser(user) } private fun getUser(): User? { return User().apply { userID = "test@yopmail.com" } } companion object { const val USER_PREFS = "userprefs" const val USER_ID_KEY = "UserID"; } }
но попадая ниже ошибки, не уверен, почему его высказывание не вызывается
Wanted but not invoked: editor.putString( "UserID", "test@yopmail.com" ); -gt; at com.example.UserRepoTest.when store user then load user(UserRepoTest.kt:41) Actually, there were zero interactions with this mock.
Ответ №1:
Порядок важен. Вызовите действие storeUser()
, прежде чем пытаться verify
сделать то, что оно сделало.
Комментарии:
1. Уже пробовал, но безуспешно.