Kotlin中如何验证同一方法两次调用的不同参数正确性?
验证同一方法两次调用不同参数的正确方式
问题场景
某方法会被按顺序调用两次,传入不同参数:
method("test1")method("test2")
原测试代码无法正常工作:
`when`( mockClass.method( anyObject() ) ).then { param -> val value: Class = param.arguments[0] as Class assert(value == "test1") } `when`( mockClass.method( anyObject() ) ).then { param -> val value: Class = param.arguments[0] as Class assert(value == "test2") }
问题原因
重复调用when配置方法行为时,后续的配置会覆盖之前的规则,导致所有调用都会走最后一个then逻辑,无法区分两次不同的参数传入。
正确解决方案
方案1:使用ArgumentCaptor捕获参数后验证
通过参数捕获器收集所有调用的参数,再逐一验证:
// 创建字符串类型的参数捕获器 val argCaptor = ArgumentCaptor.forClass(String::class.java) // 验证目标方法被调用了两次 verify(mockClass, times(2)).method(argCaptor.capture()) // 获取所有捕获到的参数 val capturedParams = argCaptor.allValues // 分别验证两次调用的参数 assert(capturedParams[0] == "test1") assert(capturedParams[1] == "test2")
方案2:使用InOrder按调用顺序验证
如果需要严格保证调用顺序,用InOrder按顺序验证每次调用的参数:
// 创建有序验证器 val inOrder = inOrder(mockClass) // 验证第一次调用传入"test1" inOrder.verify(mockClass).method("test1") // 验证第二次调用传入"test2" inOrder.verify(mockClass).method("test2")
内容的提问来源于stack exchange,提问作者Naomi
相关产品推荐
相关产品推荐

