【发布时间】:2018-04-06 05:20:03
【问题描述】:
我使用 RxJava 2 Observable 将条形码扫描仪包装在我的一个应用程序中。这个 sn-p 展示了我如何订阅 Observable 并收听它的事件
override fun start() {
disposables.addAll(subscribeToBarcodeReader(), loadUser())
}
private fun subscribeToBarcodeReader(): Disposable {
return barcodeObservable
.subscribeOn(bgScheduler)
.observeOn(mainScheduler)
.subscribeBy(
onNext = { barcode -> saveBarcode(barcode) },
onComplete = { Log.d(TAG, "Barcode observable complete") },
onError = { e -> Log.d(TAG, "Barcode observable error", e) }
)
}
barcodeObservable 是 Observable<Barcode> 类型的对象。这一切都可以在带有真正条形码扫描仪的真实设备上正常工作。现在我想对saveBarcode() 方法进行单元测试并尝试以这种方式模拟Observable<Barcode>
@RunWith(MockitoJUnitRunner::class)
class OrbFoldersPresenterTests {
@Mock
private lateinit var jobService: FolderJobService
private val bgScheduler = TestScheduler()
private val mainScheduler = TestScheduler()
private val barcodeObservable: Observable<Barcode> = Observable.just(Barcode(
"2500020109205", LocalDateTime.now().toString()))
@Mock
private lateinit var userStore: UserStore
@Mock
private lateinit var prefs: Preferences
@Mock
private lateinit var barcodeService: BarcodeReadService
@Test
fun testBarcodeSave() {
val jobId = 201804040001
val disposables = CompositeDisposable()
whenever(userStore.authorizedUser()).thenReturn(Maybe.just(User()))
val presenter = OrbFoldersPresenter(jobId, jobService, disposables, bgScheduler,
mainScheduler, barcodeObservable, userStore, prefs, barcodeService)
presenter.start()
}
}
我希望当我调用 presenter.start() 时,演示者必须订阅 barcodeObservable 并使用我提供的对象接收 onNext() 事件。但这并没有发生。我究竟做错了什么?
【问题讨论】:
标签: android kotlin rx-java2 rx-kotlin2