使用 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")
}

如果你能帮我一点忙,我将不胜感激。

当然你没有任何覆盖,因为 flatmapflatMapCompletable 运算符中的代码没有被执行。

你需要订阅Observable才能发出元素在你的情况下它只会在你订阅[=20=时发出0 ] 为了它。这就是 RxJava 的工作原理。像这样:

val subscriber = TestSubscriber<>();

val resp = userRepository.register("x7gbyb68837g78s", "XXX-XXX-XXX").subscribe(subscriber)

subscriber.assertComplete()