Мне нужна помощь. Я использую 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 и средних, но, похоже, ни одна из этих статей не может быть применена здесь Большое спасибо за любую помощь.