ScalaMock使用MockFunction1时如何带公差匹配含Double字段的入参
ScalaMock MockFunction1入参Double字段带公差匹配实现方案
- 核心思路:不直接传入固定预期对象做全等匹配,使用ScalaMock提供的
where方法自定义入参匹配逻辑,对Double字段增加公差判断
步骤1:编写自定义比较逻辑
先实现两个Result对象的比对方法,对嵌套的Double字段做带公差的比较,非Double字段可直接做全等匹配:
def isResultMatch(expected: Result, actual: Result, tolerance: Double = 0.01): Boolean = { // 非Double字段直接全等匹配,按需添加 expected.其他非Double字段 == actual.其他非Double字段 && // Double字段带公差匹配 Math.abs(expected.m.a - actual.m.a) < tolerance && Math.abs(expected.m.b - actual.m.b) < tolerance }
步骤2:替换原有调用验证写法
将原来直接传固定result的写法替换为自定义匹配逻辑:
// 构造你预期的Result对象 val expectResult: Result = ??? mockFunction.expects(where { actualResult: Result => isResultMatch(expectResult, actualResult) }).once()
可选优化
如果需要复用公差匹配逻辑,也可以单独封装Double的比较方法:
def doubleEquals(actual: Double, expect: Double, tolerance: Double = 0.01): Boolean = Math.abs(actual - expect) < tolerance
后续新增Double字段比对时直接调用该方法即可。
内容的提问来源于stack exchange,提问作者ksceriath
相关产品推荐
相关产品推荐

