Scala:类中变量调用的Mock方法失效,测试结果不符预期
问题分析与解决
核心说明
你看到的结果不是Mock未生效,而是代码逻辑与测试预期不匹配,再加上测试代码存在语法错误。
具体原因
测试代码的实例创建错误
你的A是带参数的case class,创建实例时必须传入client参数,但测试代码里写的val a = A是错误写法,正确格式应为val a = A(client),否则根本无法编译通过,更无法使用mock的client实例。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
相关产品推荐
相关产品推荐

