Код успешно работает в реальном устройстве, но mockito хотел, но не вызывал - PullRequest
2 голосов
/ 20 сентября 2019

Я получаю mockito, который требуется, но не вызывается.Я не знаю, что делать, потому что я новичок здесь :).кстати, когда я запускаю код в реальном устройстве, все в порядке.

Требуется, но не вызывается: наблюдатель.onChanged (true);

TestClass

 @RunWith(MockitoJUnitRunner::class)
    class LoginViewModelTest {

         var loginViewModel: LoginViewModel? = null
        @get:Rule
        val instantTaskExecutorRule = InstantTaskExecutorRule()
        @Mock
        lateinit var observer: Observer<Boolean>
        @Mock
        lateinit var dataManager: DataManager

        @Before
        fun setup() {
            MockitoAnnotations.initMocks(this)
            loginViewModel = LoginViewModel(dataManager)
        }

        @Test
        fun testApiFetchDataSuccess() {
            loginViewModel?.liveData?.observeForever(observer)
            loginViewModel?.login("test", "1234")
            verify(observer)?.onChanged(true)
        }

    }

ViewModelClass

class LoginViewModel(dataManager: DataManager?) : BaseViewModel() {

    var liveData: MutableLiveData<Boolean>
    var dataManager: DataManager? = dataManager

    init {
        liveData = MutableLiveData()
    }

    fun login(email: String, password: String) {
        dataManager?.getFireStoreManager()?.login(email, password)?.get()?.addOnSuccessListener {
            if (it.documents.size > 0) {
                val data = it.documents[0].toObject(User::class.java)
                liveData.postValue(true)
            } else {
                liveData.postValue(false)
            }
        }?.addOnFailureListener {
            liveData.postValue(false)
        }
    }
}

1 Ответ

1 голос
/ 20 сентября 2019

get() ничего не возвращает, потому что вы издеваетесь dataManager, который содержит все данные.

В моем случае это выглядело так:

`when`(collectionRef.document(ArgumentMatchers.anyString())).thenReturn(documentReference)
`when`(documentReference.get()).thenReturn(firestoreDocumentResult)

Вам просто нужновозвращать макет для каждого метода, который сработает Ваш dataManager.

...