Хотели, но не вызывали: на самом деле, с этим макетом не было никаких взаимодействий. для общих ссылок

#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. Уже пробовал, но безуспешно.