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

Scala:类中变量调用的Mock方法失效,测试结果不符预期

问题分析与解决

核心说明

你看到的结果不是Mock未生效,而是代码逻辑与测试预期不匹配,再加上测试代码存在语法错误。

具体原因

  1. 测试代码的实例创建错误
    你的A是带参数的case class,创建实例时必须传入client参数,但测试代码里写的val a = A是错误写法,正确格式应为val a = A(client),否则根本无法编译通过,更无法使用mock的client实例。

  2. handle方法逻辑与预期不符
    原类中handle方法的逻辑明确:

    def handle(s: String):String = s match {
         case sc if (sc.notEmpty) => "" // 非空字符串返回空
         case sc => s // 空字符串返回原内容
    }
    

    当你Mock getValue()返回"A"(非空字符串)时,handle会返回"",这完全符合代码逻辑,并非Mock未生效。

解决方法

根据你的实际需求选择对应的调整方案:

方案1:希望输入"A"时c返回"A"

修改handle方法的判断逻辑,将空字符串作为返回空值的条件:

def handle(s: String):String = s match {
    case sc if (sc.isEmpty) => "" // 空字符串返回空
    case sc => s // 非空字符串返回原内容
}

同时修正测试代码:

val client = mock[Client]
(client.getValue) expects() returns("A")

val a = A(client) // 正确传入mock的client
a.c should be ("A")

方案2:保持原handle逻辑,测试空字符串场景

如果原逻辑是正确的,只是测试场景选错了,那么让Mock返回空字符串即可:

val client = mock[Client]
(client.getValue) expects() returns("")

val a = A(client)
a.c should be ("")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 21:55:17