Я пытаюсь убедиться, что когда я вызываю мой интерактор createUser в моем докладчике, пользователь создается в Firebase.
Для этого я просто реализовал этот контрольный пример
RegisterTest.class
@Captor
var callbackCaptor: ArgumentCaptor<RegisterInteractor.RegisterCallBack>? = null
@Mock
lateinit var view: RegisterContract.View
@Mock
lateinit var interactor: RegisterInteractor
lateinit var presenter: RegisterPresenter
@Before
fun setUp() {
MockitoAnnotations.initMocks(this)
presenter = RegisterPresenter(interactor)
presenter.attachView(view)
}
@Test
fun should_SignUpUser(){
//give
presenter.signUp("testUser","testEmail@gmail.com","123456")
//when
verify(interactor).createUserWithEmailAndPassword("testUser","testEmail@gmail.com","123456", callbackCaptor!!.capture())
callbackCaptor?.value?.onRegistrationSucces()
//then
verify(view).navigateToMain()
}
Регистрация Обратного звонка Интерактора
interface RegisterInteractor {
interface RegisterCallBack {
fun onRegistrationSucces()
fun onRegistrationFailure(errorMsg:String)
}
fun createUserWithEmailAndPassword(fullName:String,email:String,password:String,listener:RegisterCallBack)
}
RegisterPresenter
Здесь я вызываю метод signUp для проверки
override fun signUp(fullName:String, email: String, password: String) {
view?.showProgress()
registerInteractor?.createUserWithEmailAndPassword(fullName,email, password, object : RegisterInteractor.RegisterCallBack {
override fun onRegistrationSucces() {
if(isViewAttached()){
view?.navigateToLogin()
view?.hideProgress()
}
}
override fun onRegistrationFailure(errorMsg:String) {
if(isViewAttached()){
view?.showError(errorMsg)
view?.hideProgress()
}
}
})
}
RegisterInteractorImpl
override fun createUserWithEmailAndPassword(fullName:String,email:String,password:String,listener: RegisterInteractor.RegisterCallBack){
FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
// Sign in success, set full name and navigate to main.
val user = FirebaseAuth.getInstance().currentUser
val profileUpdates = UserProfileChangeRequest.Builder()
.setDisplayName(fullName)
.build()
// Checks if the user is already in the database, if not, it will write it and go to the main activity
user?.updateProfile(profileUpdates)
?.addOnCompleteListener { updateTask ->
if (updateTask.isSuccessful) {
userRepository.createUser(fullName,email,object : UserRepository.UserRepositoryCallback{
override fun onRemoteSuccess() {
listener.onRegistrationSucces()
}
override fun onRemoteFailure(errormsg:String) {
// Since the task is the one who decides if an user is created or not by checking if the email is not duplicated, this callback has no effect on saving a call to Firestore
}
})
}
}
} else {
listener.onRegistrationFailure(task.exception?.message!!)
}
}
}
И я получаю IllegalStateException при выполнении моего теста, это следующее сообщение, которое я получаю
java.lang.IllegalStateException: callbackCaptor !!. Capture () не должен
быть нулевым
в
com.logintest.presentation.register.presenter.RegisterPresenterTest.should_SignUpUser (RegisterPresenterTest.kt: 123)
в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в
sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
в
sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:498) в
org.junit.runners.model.FrameworkMethod $ 1.runReflectiveCall (FrameworkMethod.java:50)
в
org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12)
в
org.junit.runners.model.FrameworkMethod.invokeExplosively (FrameworkMethod.java:47)
в
org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:17)
в
org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:26)
в org.junit.runners.ParentRunner.runLeaf (ParentRunner.java:325) в
org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:78)
в
org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:57)
в org.junit.runners.ParentRunner $ 3.run (ParentRunner.java:290) в
org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) в
org.junit.runners.ParentRunner.runChildren (ParentRunner.java:288) в
org.junit.runners.ParentRunner.access $ 000 (ParentRunner.java:58) в
org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) в
org.junit.runners.ParentRunner.run (ParentRunner.java:363) в
org.junit.runner.JUnitCore.run (JUnitCore.java:137) в
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs (JUnit4IdeaTestRunner.java:68)
в
com.intellij.rt.execution.junit.IdeaTestRunner $ Repeater.startRunnerWithArgs (IdeaTestRunner.java:47)
в
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart (JUnitStarter.java:242)
в
com.intellij.rt.execution.junit.JUnitStarter.main (JUnitStarter.java:70)
А строка, в которой указано, что ошибка на тесте
verify(interactor).createUserWithEmailAndPassword("userTest","userEmail@gmail.com","123456", callbackCaptor!!.capture())
Откуда эта ошибка?
Спасибо