I'm fairly new to Kotlin and Kotest, been scratching my head on how to properly unit test webflux application. Looking over kotest samples here, to me that looks like it's spinning up a WebTestClient
server and is more like integration test(please correct me if I'm wrong).
My app is fairly simple, I have a rest controller that I'm using constructor injecting to inject my service.
This service uses WebClient
to call a different external service that returns a Mono<MyResponse>
. And my test looks something like so:
@SpringBootTest
class MyControllerTest : FunSpec({
lateinit var service: MyService
lateinit var controller: MyController
beforeTest {
service = mockk()
controller = MyController(service)
}
test("should return my response") {
val myResponse = MyResponse(name = "John Doe")
every { service.getName(any()) } returns Mono.just(myResponse)
val response = controller.getName()
verify { service.getName(any()) }
response shouldBe myResponse
}
})
The error I'm getting is:
expected: MyResponse(name = "John Doe")
actual: Monojust