为何MockK在验证方法未调用场景时执行目标方法?
问题原因
你遇到的NullPointerException是Kotlin非空参数检查+MockKany()默认行为共同导致的:当你在verify块中写processResponse(any())时,虽然核心目的是验证方法未被调用,但Kotlin编译器会优先执行any()获取参数值——any()默认返回null,而processResponse的参数是非空类型,此时Kotlin的非空检查会直接抛出异常,这个错误发生在MockK开始验证逻辑之前,和方法实际是否被调用完全无关。
解决方法
以下几种方式都能避免这个错误:
使用
nonNull()匹配器:该匹配器会返回对应类型的非空实例(引用类型自动生成Mock对象),不会触发非空检查:verify(exactly = 0) { processResponse(nonNull()) }指定
any()的nullable参数为false:明确要求返回非空值:// 替换YourResponseType为processResponse参数的实际类型 verify(exactly = 0) { processResponse(any<YourResponseType>(nullable = false)) }使用
match匹配器:通过条件匹配逻辑代替传递具体参数值,绕开参数实例的创建:verify(exactly = 0) { processResponse(match { true }) }使用
ofType匹配器:匹配指定类型的参数,同样不会生成null值:// 替换YourResponseType为processResponse参数的实际类型 verify(exactly = 0) { processResponse(ofType<YourResponseType>()) }
内容的提问来源于stack exchange,提问作者AndroidDev
相关产品推荐
相关产品推荐

