使用 mockK 进行单元测试 - flatMap
Unit test with mockK - flatMap
我是单元测试的新手,我不明白如何使用 MockK 使用 kotlin 测试这种方法:
override fun register(firebaseId: String, uniqueId: String): Completable {
return Observable.just(0).observeOn(schedulerProvider.io()).flatMap {
val requestRegisterPushes = registerBuilder.build(firebaseId, uniqueId)
apiServiceFactory.build()
.registerPushes(requestRegisterPushes)
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.ui())
}.flatMapCompletable {
Completable.complete()
}
}
这是我测试的代码,测试成功但是条件覆盖率没有增加。
@Test
fun `register_Test()`() {
val requestRegisterPushes = mockk<RequestRegisterPushes>(relaxed = true)
every { registerBuilder.build(any(), any(), any(), any()) } returns requestRegisterPushes
every { apiServiceFactory.build().register(requestRegisterPushes) } returns Observable.just(SimpleResponse())
val resp = userRepository.register("x7gbyb68837g78s", "XXX-XXX-XXX")
}
如果你能帮我一点忙,我将不胜感激。
当然你没有任何覆盖,因为 flatmap
和 flatMapCompletable
运算符中的代码没有被执行。
你需要订阅到Observable
才能发出元素在你的情况下它只会在你订阅[=20=时发出0 ] 为了它。这就是 RxJava 的工作原理。像这样:
val subscriber = TestSubscriber<>();
val resp = userRepository.register("x7gbyb68837g78s", "XXX-XXX-XXX").subscribe(subscriber)
subscriber.assertComplete()
我是单元测试的新手,我不明白如何使用 MockK 使用 kotlin 测试这种方法:
override fun register(firebaseId: String, uniqueId: String): Completable {
return Observable.just(0).observeOn(schedulerProvider.io()).flatMap {
val requestRegisterPushes = registerBuilder.build(firebaseId, uniqueId)
apiServiceFactory.build()
.registerPushes(requestRegisterPushes)
.subscribeOn(schedulerProvider.io())
.observeOn(schedulerProvider.ui())
}.flatMapCompletable {
Completable.complete()
}
}
这是我测试的代码,测试成功但是条件覆盖率没有增加。
@Test
fun `register_Test()`() {
val requestRegisterPushes = mockk<RequestRegisterPushes>(relaxed = true)
every { registerBuilder.build(any(), any(), any(), any()) } returns requestRegisterPushes
every { apiServiceFactory.build().register(requestRegisterPushes) } returns Observable.just(SimpleResponse())
val resp = userRepository.register("x7gbyb68837g78s", "XXX-XXX-XXX")
}
如果你能帮我一点忙,我将不胜感激。
当然你没有任何覆盖,因为 flatmap
和 flatMapCompletable
运算符中的代码没有被执行。
你需要订阅到Observable
才能发出元素在你的情况下它只会在你订阅[=20=时发出0 ] 为了它。这就是 RxJava 的工作原理。像这样:
val subscriber = TestSubscriber<>();
val resp = userRepository.register("x7gbyb68837g78s", "XXX-XXX-XXX").subscribe(subscriber)
subscriber.assertComplete()