You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何验证同一方法两次调用的不同参数正确性?

验证同一方法两次调用不同参数的正确方式

问题场景

某方法会被按顺序调用两次,传入不同参数:

  1. method("test1")
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:56:29