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

如何查看MockK中assertEquals(...)断言失败的原因

问题:MockK验证时如何查看预期与实际对象的详细差异

测试代码

verify {
    function.send(
        withArg { assertEquals(expected, actual) },
        withArg { assertEquals(expected, actual) })
}

当前堆栈跟踪输出

[1]: argument: ...responseCode=0003, usdAmount=12), matcher: matcher<Transaction>(), result: -
[2]: argument: CHARGEBACK, matcher: matcher<Reason>(), result: +

Stack trace:
io.mockk.impl.InternalPlatform.captureStackTrace (InternalPlatform.kt:125)
io.mockk.impl.stub.MockKStub.handleInvocation (MockKStub.kt:250)
...

已配置的MockK设置

stackTracesOnVerify=true
stackTracesAlignment=left

解决方法

1. 改用eq匹配器(推荐)

直接使用MockK的eq匹配器替代withArg+assertEquals,eq会自动对比对象字段,并在不匹配时输出详细差异:

verify {
    function.send(
        eq(expectedTransaction),
        eq(expectedReason)
    )
}

参数不匹配时,MockK会打印出预期和实际对象的每个字段差异,无需额外配置。

2. 结合AssertJ断言增强差异输出

如果需要在withArg中自定义逻辑,改用AssertJ的断言方法,它会在失败时生成更详细的对象差异描述:

verify {
    function.send(
        withArg { assertThat(it).isEqualTo(expectedTransaction) },
        withArg { assertThat(it).isEqualTo(expectedReason) }
    )
}

AssertJ的isEqualTo会遍历对象字段,输出哪些字段值不匹配、具体差异是什么,这些信息会被MockK包含在验证失败的堆栈信息中。

3. 开启MockK详细匹配配置

添加以下配置项,让MockK默认输出更详细的参数匹配差异:

mockk.detailed.matching=true

或者在代码中全局配置:

MockK.configure {
    detailedMatching = true
}

内容的提问来源于stack exchange,提问作者ffff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:51:03