6155031
6155031

Reputation: 4327

Code is running succesfully in real device but mockito wanted but not invoked

I am getting mockito wanted but not invoked. I don't know what to do cause Im new here :). by the way when I run the code in real device its okay.

Wanted but not invoked: observer.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)
        }
    }
}

Upvotes: 2

Views: 514

Answers (1)

Michał Mosoń
Michał Mosoń

Reputation: 61

get() doesn't return anything because You mock dataManager which holds all the data.

In my case it looked like this:

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

You just need to return mock for every method that Your dataManager will trigger.

Upvotes: 1

Related Questions