Kotlin 1.2, retrofit2 unit testing, How to mock subscribe with mockito?
I need help. I'm using Kotlin 1.2, RxJava2 (2.0.2), Retrofit2 (2.4.0) and mockito (2.22.0). I have MVP project I need to test. I want to know if function getPastEventList reach result block and not error block. Optionally, I should know the data received inside result block.
My Presenter is like this:
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()
}
)
}
my ApiService is like this:
interface ApiService {
@GET("eventspastleague.php")
fun getPastMatches(@Query("id") action: String):
Observable<EventModel.Events>
}
RxJavaUtils class is like this:
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
object RxJavaUtils {
var getSubscriberOn = { Schedulers.io() }
var getObserveOn = { AndroidSchedulers.mainThread() }
}
And my attempt so far is like this:
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?
}
}
I'm really stuck. I've read many stackoverflow & medium posts, but seems none of those articles can be applied here. Many thanks for any help.
kotlin mockito retrofit2 rx-java2
add a comment |
I need help. I'm using Kotlin 1.2, RxJava2 (2.0.2), Retrofit2 (2.4.0) and mockito (2.22.0). I have MVP project I need to test. I want to know if function getPastEventList reach result block and not error block. Optionally, I should know the data received inside result block.
My Presenter is like this:
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()
}
)
}
my ApiService is like this:
interface ApiService {
@GET("eventspastleague.php")
fun getPastMatches(@Query("id") action: String):
Observable<EventModel.Events>
}
RxJavaUtils class is like this:
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
object RxJavaUtils {
var getSubscriberOn = { Schedulers.io() }
var getObserveOn = { AndroidSchedulers.mainThread() }
}
And my attempt so far is like this:
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?
}
}
I'm really stuck. I've read many stackoverflow & medium posts, but seems none of those articles can be applied here. Many thanks for any help.
kotlin mockito retrofit2 rx-java2
add a comment |
I need help. I'm using Kotlin 1.2, RxJava2 (2.0.2), Retrofit2 (2.4.0) and mockito (2.22.0). I have MVP project I need to test. I want to know if function getPastEventList reach result block and not error block. Optionally, I should know the data received inside result block.
My Presenter is like this:
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()
}
)
}
my ApiService is like this:
interface ApiService {
@GET("eventspastleague.php")
fun getPastMatches(@Query("id") action: String):
Observable<EventModel.Events>
}
RxJavaUtils class is like this:
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
object RxJavaUtils {
var getSubscriberOn = { Schedulers.io() }
var getObserveOn = { AndroidSchedulers.mainThread() }
}
And my attempt so far is like this:
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?
}
}
I'm really stuck. I've read many stackoverflow & medium posts, but seems none of those articles can be applied here. Many thanks for any help.
kotlin mockito retrofit2 rx-java2
I need help. I'm using Kotlin 1.2, RxJava2 (2.0.2), Retrofit2 (2.4.0) and mockito (2.22.0). I have MVP project I need to test. I want to know if function getPastEventList reach result block and not error block. Optionally, I should know the data received inside result block.
My Presenter is like this:
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()
}
)
}
my ApiService is like this:
interface ApiService {
@GET("eventspastleague.php")
fun getPastMatches(@Query("id") action: String):
Observable<EventModel.Events>
}
RxJavaUtils class is like this:
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
object RxJavaUtils {
var getSubscriberOn = { Schedulers.io() }
var getObserveOn = { AndroidSchedulers.mainThread() }
}
And my attempt so far is like this:
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?
}
}
I'm really stuck. I've read many stackoverflow & medium posts, but seems none of those articles can be applied here. Many thanks for any help.
kotlin mockito retrofit2 rx-java2
kotlin mockito retrofit2 rx-java2
edited Nov 15 '18 at 7:06
Dika
asked Nov 15 '18 at 6:24
DikaDika
7001126
7001126
add a comment |
add a comment |
0
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53313582%2fkotlin-1-2-retrofit2-unit-testing-how-to-mock-subscribe-with-mockito%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53313582%2fkotlin-1-2-retrofit2-unit-testing-how-to-mock-subscribe-with-mockito%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown