私は以下のcallInit
メソッドを検証する単体テストを書いたかったのです。しかし、私はラインがsubscribe(
を保持するnullポインタの例外があります。私の質問は、以下のような方法でonnextとonerrorの条件をどのように検証するのですか?TestSchedulerが機能しない(Kotlin + RxJava2 + mockito)
override fun callInit() {
val requestInit = RequestInit(os = "android", osVersion = deviceUtil.osVersion(),
appVersion = deviceUtil.apiVersion())
compositeDisposable.add(
interactor.getInit(requestInit)
.subscribe(
{
view.hideProgress()
this.commercialLink = it.commercialLink
view.updateScreen()
},
{ error -> view.onError(error) }
)
)
}
試験方法:
@Test
fun should_update_commerciallink_AND_updateScreen_when_callInit() {
val request = RequestInit("android", "version", "osversion")
val responseInit = ResponseInit(false, false,
"updatelink", "message", "useragreement", "commerciallink")
whenever(deviceUtil.osVersion()).thenReturn("version")
whenever(deviceUtil.apiVersion()).thenReturn("apiversion")
whenever(interactor.getInit(request)).thenReturn(Observable.just(responseInit))
presenter.callInit()
testScheduler.triggerActions()
verify(view).hideProgress()
verify(view).updateScreen()
}
EDIT
class SplashInteractor(private val initService: InitService,
private val schedulerProvider: SchedulerProvider) : SplashContract.Interactor {
override fun getInit(requestInit: SplashRequest.Init): Observable<SplashResponse.Init> {
return initService.init(requestInit)
.subscribeOn(schedulerProvider.io())
.flatMap(funcErrorCheckAndTransform())
.flatMap(funcVersionControl())
.observeOn(schedulerProvider.ui())
}
override fun downloadCommercialVideo(commercialLink: String): Observable<File> {
return initService.downloadCommercialLink(commercialLink)
.subscribeOn(schedulerProvider.io())
.flatMap(funcDownload(commercialLink))
.observeOn(schedulerProvider.ui())
}
}
プレゼンターテストあなたがwhenever
文のいずれかでタイプミスを持って
@Before
fun setUp() {
testScheduler = TestScheduler()
interactor = SplashInteractor(initService, TestSchedulerProvider(testScheduler))
presenter = SplashPresenter(contract, interactor, uriWrapper, compositeDisposable,
cache, fileUtil, deviceUtil)
spyPresenter = Mockito.spy(presenter)
}
問題は、 'requested'パラメータが渡されたという条件をチェックしているため、最後の' whenever'ステートメントにあると思います。パラメータが 'Mockito.isA(RequestInit.class)'のような 'RequestInit'であることをパラメータとしてチェックするだけでよいのです。 javaの場合、 '(interactor.getInit(isA(RequestInit.class)))thenReturn(Observable.just(responseInit))' – GVillani82
テストで 'TestScheduler'をどのように設定するかを表示できますか?あなたのコードを見て、それを必要としないテスト –