ArgumentCaptor - Аргумент (ы) разные - PullRequest
0 голосов
/ 03 мая 2019

Я просто пытаюсь проверить, создан ли пользователь с помощью асинхронного метода, я новичок в тестировании, и я использую ArgumentCaptor, чтобы проверить, вызывается ли обратный вызов onRegistrationSucces() 1 раз, чтобы проверить, что онбыл успешным.

Это то, что я сделал, чтобы проверить это

RegisterTest.kt

@Test
    fun should_SignUpUser(){
        presenter.signUp("test1","test1@gmail.com","asdasd")
        verify(interactor).createUserWithEmailAndPassword("test1","test1@gmail.com","asdasd",object: RegisterInteractor.RegisterCallBack{
            override fun onRegistrationSucces() {
                callbackCaptor.capture()
            }

            override fun onRegistrationFailure(errorMsg: String) {
                callbackCaptor.capture()
            }
        })
        verify(callbackCaptor.value.onRegistrationSucces(), times(1))
    }

И это метод презентатора, который я пытаюсь проверить

RegisterPresenter.kt

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()
                    }
                }

            })
    }

Но я получаю эту ошибку

Аргумент (ы) разные!Требуются: interactiveor.createUserWithEmailAndPassword ("test1", "test1@gmail.com", "asdasd", com.testapp.presentation.register.presenter.RegisterPresenterTest$should_SignUpUser$1@c86b9e3);-> at com.testapp.presentation.register.presenter.RegisterPresenterTest.should_SignUpUser (RegisterPresenterTest.kt: 119) У фактического вызова есть разные аргументы: interactiveor.createUserWithEmailAndPassword («test1», «test1@gmail.com», «asd»).testapp.presentation.register.presenter.RegisterPresenter $ signUp $ 1 @ 10aa41f2);-> at com.testapp.presentation.register.presenter.RegisterPresenter.signUp (RegisterPresenter.kt: 64)

Ответы [ 2 ]

2 голосов
/ 04 мая 2019
inner class below:          

class CallbackRegister extends RegisterInteractor.RegisterCallBack {  
private View view;
private Object forViewattached;     

public CallbackRegister(Object forViewattached, View view){
this.forViewattached=forViewattached;
this.view = view;
}

 override fun onRegistrationSucces() {
                    if(forViewattached.isViewAttached()){
                        view?.navigateToLogin()
                        view?.hideProgress()
                    }
                }

                override fun onRegistrationFailure(errorMsg:String) {
                    if(forViewattached.isViewAttached()){
                        view?.showError(errorMsg)
                        view?.hideProgress()
                    }
                }


//end class
}


Access this by the  kotlin equivalent:

object : new CallbackRegister(forViewattached, view)   

instead of object: RegisterInteractor.RegisterCallBack{...}

you can easily test this by:   TopLevelClass.CallbackRegister callbackRegisterUnderTest = new TopLevelClass().new CallbackRegister(MockforViewattached, MockView);

You can now call the callback methods directly and verify the mocks:

callbackRegisterUnderTest.onRegistrationSucces()
verify the mocks did something.
You have to convert this to kotlin, but I hope you see what is happening.
0 голосов
/ 03 мая 2019

Проблема в том, что обратные вызовы для каждого из методов createuserwithemail и passwords различны. Вот почему вы видите ошибку «аргумент другой».

Используйте следующее для правильной записи обратного вызова:

verify(interactor).createUserWithEmailAndPassword(anyString(),anyString(),anyString(),callbackCaptor.capture())
            verify(callbackCaptor.value.onRegistrationSucces(), times(1))

Вы можете заменить anyString уникальными захватчиками строк, если вы когда-нибудь захотите это проверить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...