Home > other >  Unit test with mockK - flatMap
Unit test with mockK - flatMap

Time:09-28

I'm new in Unit Testing, I can't understand how to test this kind of method with kotlin, using 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() 
    }
}

This is my code for the test, the test was a success but the condition coverage does not increase.

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

I would really appreciate it if you could help me a little.

CodePudding user response:

Of course you don't have any coverage because code inside flatmap and flatMapCompletable operator was not executed.

You need to subscribe to Observable to make it emmit elements in you case it will emmit 0 only when you subscribe for it. That's how RxJava works. Something like this:

val subscriber = TestSubscriber<>();

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

subscriber.assertComplete()
  • Related