0

With mockito, I want to test a retrofit response. Can you guide me in this.. I am new in unit testing with mockito so if you can guide me try to explain your answer a little bit.

viewModel

fun loginUser() {
        repository.loginUser(this, "john@mail.com", "changeme2")
    }

Repository class

open class LoginRepository @Inject constructor() {
    fun loginUser(loginResponse: LoginResponse, email: String, password: String) {
        val result = RetrofitClient.getAPI(RetrofitClient.getInstance())
        var call = result.loginUser(email, password)
        call.enqueue(object : Callback<JsonObject> {
            override fun onResponse(call: Call<JsonObject>, response: Response<JsonObject>) {
                loginResponse.onSuccess()
            }

            override fun onFailure(call: Call<JsonObject>, t: Throwable) {
                loginResponse.onFail()
            }
        })
    }
}

Test class

@RunWith(MockitoJUnitRunner::class)
class LoginViewModelMockTest {
    lateinit var loginViewModel: LoginViewModel
    lateinit var repository: LoginRepository
    lateinit var loginResponse: LoginResponse

    @Before
    fun setUp() {
        loginResponse=mock(LoginResponse::class.java)
        repository = mock(LoginRepository::class.java)
        loginViewModel = LoginViewModel(repository)
    }

    @Test
    fun loginUser_loginUserCalled_onSuccessShouldCalled() {
        loginViewModel.loginUser()
        `when`(repository.loginUser(loginResponse, "john@mail.com", "changeme2")).then{
            (it.getArgument(2) as LoginResponse).onSuccess()
        }
        verify(loginResponse).onSuccess()
    }


}
Mohammad Taqi
  • 161
  • 2
  • 8

0 Answers0