Я борюсь с ArgumentCaptor уже неделю, и не могу найти какой-либо ресурс или что происходит.
Просто я хочу проверить, может ли пользователь войти в мое приложение, я делаю это, просто вызывая метод презентатора signInWithEmailAndPassword(email,password)
, а затем проверяю, выполняется ли обратный вызов интерактора, чтобы убедиться, что он успешно вошел в систему, но каждый раз Я запускаю тест, я получаю это
java.lang.IllegalStateException: callbackCaptor.capture() must not be null
Presenter
override fun signInWithEmailAndPassword(email: String, password: String) {
view?.showProgress()
signInInteractor.signInWithEmailAndPassword(email, password, object : SignInInteractor.SignInCallBack {
override fun onSuccess() {
if (isViewAttached()) {
view?.navigateToMain()
}
}
override fun onFailure(errormsg: String) {
if (isViewAttached()) {
view?.hideProgress()
view?.showError(errormsg)
}
}
})
}
PresenterTest
@Captor
private lateinit var callbackCaptor: ArgumentCaptor<SignInInteractor.SignInCallBack>
@Mock
lateinit var view: LoginContract.View
@Mock
lateinit var interactor:SignInInteractor
@InjectMocks
lateinit var presenter: LoginPresenter
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
presenter.attachView(view)
}
@Test
fun shouldLoginIn(){
presenter.signInWithEmailAndPassword("test4@gmail.com","asdasd")
verify(interactor,times(1)).signInWithEmailAndPassword("test4@gmail.com","asdasd",callbackCaptor.capture())
callbackCaptor.value.onSuccess()
verify(view,times(1)).navigateToMain()
}
SignInCallback
interface SignInInteractor {
interface SignInCallBack {
fun onSuccess()
fun onFailure(errormsg:String)
}
fun signInWithEmailAndPassword(email:String,password:String,listener:SignInCallBack)
}
И мой
Interactor
override fun signInWithEmailAndPassword(email:String, password:String, listener: SignInInteractor.SignInCallBack) {
FirebaseAuth.getInstance()?.signInWithEmailAndPassword(email, password)
?.addOnCompleteListener { task ->
if (task.isSuccessful) {
listener.onSuccess()
} else {
listener.onFailure(it.exception.message)
}
}
}
Проблема в моем тесте, не позволяет мне проверить, если параметры, которые я выполнил, метод signInWithEmailAndPassword(...)
возвращает onSuccess ()
Ошибка в этой строке
verify(interactor,times(1)).signInWithEmailAndPassword("test4@gmail.com","asdasd",callbackCaptor.capture())
PD: Я уже установил ArgumentCaptor
с ненулевым значением, но он также не работает