Kotlin 1.2, модульное тестирование дооснащения2, Как издеваться, подписаться на mockito? - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужна помощь. Я использую Kotlin 1.2, RxJava2 (2.0.2), Retrofit2 (2.4.0) и mockito (2.22.0). У меня есть проект MVP, который мне нужно проверить. Я хочу знать, достигает ли функция getPastEventList блок результата, а не блок ошибки. При желании я должен знать данные, полученные внутри блока результатов.

Мой докладчик выглядит так:

import android.content.Context
import android.widget.Toast
import ..ApiService
import ..RxJavaUtils
import ..MatchesView
import io.reactivex.disposables.Disposable

class MatchesPresenter(
    private val view: MatchesView
    , private val apiService: ApiService
) {

    fun getPastEventList(context: Context?, eventId: Int): Disposable? {
        view.showLoading()

        return apiService.getPastMatches(eventId.toString())
            .subscribeOn(RxJavaUtils.getSubscriberOn.invoke())
            .observeOn(RxJavaUtils.getObserveOn.invoke())
            .subscribe(
                { result -> //I want to know via mockito, if this request reach here (not reaching to error block below)
                    run {
                        view.hideLoading()
                        view.showEventList(
                            result.events //optional: I want to get this data via mockito
                        )
                    }
                },
                { error -> //I want to know via mockito, if this request not reach here
                    Toast.makeText(context, error.message, Toast.LENGTH_SHORT).show()
                }
            )
    }

мой ApiService выглядит так:

interface ApiService {
    @GET("eventspastleague.php")
    fun getPastMatches(@Query("id") action: String):
            Observable<EventModel.Events>
}

Класс RxJavaUtils выглядит так:

import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers

object RxJavaUtils {
    var getSubscriberOn = { Schedulers.io() }
    var getObserveOn = { AndroidSchedulers.mainThread() }
}

И моя попытка пока такая:

import android.content.Context
import ..RxJavaUtils.getObserveOn
import ..RxJavaUtils.getSubscriberOn
import ..model.EventModel
import ..presenter.MatchesPresenter
import ..view.MatchesView
import io.reactivex.schedulers.Schedulers
import org.junit.Before
import org.junit.Test
import org.mockito.Mock
import org.mockito.Mockito.`when`
import org.mockito.Mockito.mock
import org.mockito.MockitoAnnotations

class MatchesPresenterTest {

    @Mock
    private
    lateinit var view: MatchesView

    @Mock
    private lateinit var presenter: MatchesPresenter

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        presenter = MatchesPresenter(view,  ApiService.create())
    }

    @Before
    fun init() {
        getSubscriberOn = { Schedulers.from { command -> command.run() } } //Runs in current thread
        getObserveOn = { Schedulers.from { command -> command.run() } } //runs also in current thread
    }    

    @Test
    fun testGetPastEventList() {
        val context = mock(Context::class.java)
        var events : List<EventModel.Event>

        val eventId = 4328;

        `when`(
            presenter.getPastEventList(context, eventId) //return Disposable
        )
        .thenReturn( //did I wrong, if I am using this method to know subscribe result?
             //what to do?
        )
        // do I need to call another method?
    }

}

Я действительно застрял. Я прочитал много сообщений от stackoverflow и средних, но, похоже, ни одна из этих статей не может быть применена здесь Большое спасибо за любую помощь.

...