【问题标题】:Unit test with mockK - flatMap使用 mockK 进行单元测试 - flatMap
【发布时间】:2021-09-24 03:57:43
【问题描述】:

我是单元测试的新手,我不明白如何使用 kotlin 使用 MockK 测试这种方法:

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

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

【问题讨论】:

    标签: unit-testing kotlin mockito rx-java mockk


    【解决方案1】:

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

    您需要 订阅Observable 以使其发出元素,以防只有当您 订阅 时它才会发出 0。这就是 RxJava 的工作原理。像这样的:

    val subscriber = TestSubscriber<>();
    
    val resp = userRepository.register("x7gbyb68837g78s", "XXX-XXX-XXX").subscribe(subscriber)
    
    subscriber.assertComplete()
    

    【讨论】:

    • thnks Anatolii Chub,这正是我所需要的......!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2023-03-30
    • 2020-01-24
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    相关资源
    最近更新 更多