Error con los methods simulados

Intento burlarme de algunos methods en el proyecto para que cuando sean llamados, se devuelva un cierto valor. Pero cuando ejecuta las testings, caen con el resultado:

org.mockito.exceptions.misusing.InvalidUseOfMatchersException: uso no válido de los arguments coincidentes Se esperan 0 emparejamientos, 1 registrado: -> en com.hodzi.stackviewer.questions.detail.QuestionDetailPresenterTest.voteTest (QuestionDetailPresenterTest.kt: 69)

Esta exception puede ocurrir si los mezcladores se combinan con valores sin procesar: // incorrecto: someMethod (anyObject (), "raw String"); Cuando se utilizan emparejamientos, todos los arguments deben ser provistos por los emparejadores. Por ejemplo: // correcto: someMethod (anyObject (), eq ("String by matcher"));

Si ejecuta el mismo código en modo de debugging y ejecuta todas las líneas, cuando llama a shanetworking.getToken (), se devuelve el valor que hemos especificado. Pero con un arranque normal, las testings caen en esta línea.

Código:

import com.hodzi.stackviewer.questions.QuestionsInteractor import com.hodzi.stackviewer.utils.Shanetworking 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 shanetworking: Shanetworking = Mockito.mock(Shanetworking::class.java) Mockito.`when`(shanetworking.getToken()).thenReturn("23") // Mockito.doReturn("23").`when`(shanetworking).getToken() view = Mockito.mock(QuestionDetailView::class.java) presenter = QuestionDetailPresenter(questionsInteractor, shanetworking) } } @Test fun voteTest() { presenter.vote(ArgumentMatchers.anyInt(), Vote.QUESTION_DOWN) Mockito.verify(view).goToAuth() } } 

Compartido:

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

Presentador:

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

¡Gracias!

No hay nada de malo con su burla shanetworking , creo que el problema es con:

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

Simplemente use un Int real en lugar de ArgumentMatchers.anyInt() . Me gusta

 presenter.vote(0, Vote.QUESTION_DOWN) 

Los Matchers se usan cuando se hacen coincidir arguments en un object burlado, por ejemplo

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

significaría calculator.divideByTwo(int: Int) devuelve 1 cuando se llama con cualquier Int .

Al invocar methods de objects reales para probarlos (como lo hace con su presentador), usa parameters reales.