Ошибка с макетными методами

Я пытаюсь высмеять некоторые методы в проекте, чтобы при их вызове возвращалось определенное значение. Но когда вы запускаете тесты, они падают с выходом:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: Неправильное использование аргументов! 0 ожидаемых матчей, 1 записано: -> at com.hodzi.stackviewer.questions.detail.QuestionDetailPresenterTest.voteTest (QuestionDetailPresenterTest.kt: 69)

Это исключение может возникнуть, если сочетания сочетаются с необработанными значениями: // неверно: someMethod (anyObject (), "raw String"); При использовании совпадений все аргументы должны предоставляться состязаниями. Например: // correct: someMethod (anyObject (), eq ("String by matcher"));

Если вы запускаете тот же код в режиме отладки и запускаете все строки, то при вызове shared.getToken () возвращаемое значение возвращается. Но при нормальном запуске тесты попадают на эту строку.

Код:

import com.hodzi.stackviewer.questions.QuestionsInteractor import com.hodzi.stackviewer.utils.Shared import com.hodzi.stackviewer.utils.Vote import org.junit.BeforeClass import org.junit.Test import org.mockito.ArgumentMatchers import org.mockito.Mockito internal class QuestionDetailPresenterTest { companion object { lateinit var presenter: QuestionDetailPresenter lateinit var view: QuestionDetailView @BeforeClass @JvmStatic fun setUp() { val questionsInteractor: QuestionsInteractor = Mockito.mock(QuestionsInteractor::class.java) val shared: Shared = Mockito.mock(Shared::class.java) Mockito.`when`(shared.getToken()).thenReturn("23") // Mockito.doReturn("23").`when`(shared).getToken() view = Mockito.mock(QuestionDetailView::class.java) presenter = QuestionDetailPresenter(questionsInteractor, shared) } } @Test fun voteTest() { presenter.vote(ArgumentMatchers.anyInt(), Vote.QUESTION_DOWN) Mockito.verify(view).goToAuth() } } 

Общий:

 interface Shared { companion object { const val KEY_TOKEN: String = "keyToken" } fun getToken(): String fun saveToken(token: String?) } 

Ведущий:

 class QuestionDetailPresenter(val questionsInteractor: QuestionsInteractor, val shared: Shared) : BasePresenter<QuestionDetailView>() { lateinit var question: Question fun vote(id: Int, vote: Vote) { print(vote) if (Strings.isEmptyString(shared.getToken())) { view?.goToAuth() return } val observable: Observable<out Data> = when (vote) { Vote.ANSWER_UP -> { questionsInteractor.answerUpVote(id, shared.getToken()) } Vote.ANSWER_DOWN -> { questionsInteractor.answerDownVote(id, shared.getToken()) } Vote.QUESTION_UP -> { questionsInteractor.questionUpVote(id, shared.getToken()) } Vote.QUESTION_DOWN -> { questionsInteractor.questionDownVote(id, shared.getToken()) } } baseObservableData(observable, { data -> run { Log.d(Const.LOG_TAG, "success") } }, { throwable -> run { Log.d(Const.LOG_TAG, "error") } } ) } } 

Благодаря!

Нет ничего плохого в том, что вы издеваетесь над shared , я думаю, проблема связана с:

  presenter.vote(ArgumentMatchers.anyInt(), Vote.QUESTION_DOWN) 

Просто используйте реальный Int вместо ArgumentMatchers.anyInt() . подобно

 presenter.vote(0, Vote.QUESTION_DOWN) 

Матчи используются при сопоставлении аргументов на издеваемом объекте, например

 val calulator = (mock with Mockito) when(calculator.divideByTwo(anyInt()).thenReturn(1) 

будет означать calculator.divideByTwo(int: Int) возвращает 1 при вызове с любым Int .

При вызове методов реальных объектов для их проверки (например, с вашим ведущим) вы используете реальные параметры.