如何测试返回Mono的私有函数?
解决Kotlin中反射测试返回Mono的私有函数问题
你遇到的核心问题是Method.invoke()的返回值是Any?类型,编译器无法识别它是Mono实例,因此直接调用block()或toMono()都会报错。正确的做法是将反射调用的返回值强转为Mono类型,再调用block()方法。
修正后的测试代码
@Test fun testPrivateMonoFunction() { // 获取私有方法 val method = myService.javaClass.getDeclaredMethod("getSomeThing", SomethingDto::class.java) method.isAccessible = true // 构造参数 val somethingDto = SomethingDto(id = UUID.randomUUID()) // 反射调用并强转为Mono类型(如果知道具体泛型,比如Mono<Something>,可以写更具体的类型) val resultMono = method.invoke(myService, somethingDto) as Mono<*> // 调用block()获取同步结果 val result = resultMono.block() // 这里添加断言验证结果,示例: // assertNotNull(result) // val something = result as Something // assertEquals(somethingDto.id, something.id) }
为什么之前的写法失效?
- 直接调用
method.invoke(...).block():invoke()返回Any?,该类型没有block()方法,编译阶段就会报错; - 调用
method.invoke(...).toMono().block():toMono()是Reactor针对特定类型的扩展函数,Any?类型无法直接调用该方法,同样会导致编译错误。
只有将返回值明确强转为Mono类型后,才能调用Reactor提供的block()等操作符。
内容的提问来源于stack exchange,提问作者VOVDOGG
相关产品推荐
相关产品推荐

