Has anyone ever tested a stream and `.doOnError *{...
# android
l
Has anyone ever tested a stream and
.doOnError *{}*
doesn't get triggered in a Unit Test. I'm using the
Mono
from the
projectreactor
project. It basically functions like a reactive stream. What am i missing?
not kotlin but kotlin colored 2
I just asked ChatGPT and found out it was because i need to use
StepVerifier
and now I get into the
doOnError{}
block. The longer explanation is below : To test for exceptions in a Mono from Reactor Core, you can use the
StepVerifier
class to verify the behavior of the Mono. Here’s an example of how you can test for exceptions:
Copy code
import org.junit.jupiter.api.Test
import reactor.core.publisher.Mono
import reactor.test.StepVerifier

class MonoExceptionTest {

    @Test
    fun testMonoException() {
        val mono: Mono<String> = Mono.error(RuntimeException("Test exception"))

        StepVerifier.create(mono)
            .expectError(RuntimeException::class.java)
            .verify()
    }
}
In this example, the
Mono.error
method is used to create a Mono that emits an exception when subscribed to. The
StepVerifier
is then used to verify the behavior of the Mono. The
expectError
method is called to specify that an error is expected to be emitted by the Mono, and the expected exception type (
RuntimeException
in this case) is provided as a parameter. Finally, the
verify
method is called to start the verification process. If the Mono emits the expected error, the test will pass; otherwise, it will fail. You can customize the expected exception type by changing the parameter of the
expectError
method to the specific exception class you want to test. Note that using
verify()
will wait for the Mono to complete or emit an error. If you want to assert more details about the exception, you can chain additional methods like
assertErrorMessage
or
assertErrorMatches
after the
expectError
method to further refine your assertions.