scala - 如何在模拟中通过 Scala 类
问题描述
我有一个 scala 类 A,其中有一个方法doSomething
。
还有一个B类
class B(name: String)
还有一个C类
class C {
def doSomethingElse(b: B): String {
/// some logic
////
}
}
class A(c: C) {
def doSomething(uuid: UUID): String {
val b = new B("hello)
c.doSomethingElse(b)
// some logic
}
}
现在我想doSomething
使用 scalatest 和 scalamock 测试 A 类的方法
我试图模拟通话doSomethingElse
val mockC = mock[C]
val b = new B("hello")
(mockC.doSomethingElse _).expects(b).returning("A");
但是当实际调用发生时,模拟不会得到满足,因为对象B
不同。有没有办法表达这个模拟,让它得到满足?
解决方案
Thilo 的评论是正确的 - 您的两个B
s 将作为上面的引用进行比较,并且由于它们不是同一个对象,因此它们不相等。对于内容平等,您需要适当的equals
实现。如果你制作 B a ,你可以在 Scala 中免费获得它case class
。如果您无法更改 B 类,那么在 ScalaMock 中使用谓词数学可能会帮助您在测试期间比较两个实例。在这里阅读:https ://scalamock.org/user-guide/matching/
推荐阅读
- javascript - 如何使用 java rest api 和电子 js 中的路由进行登录身份验证
- javascript - 启动动态字符串数组
- git - 如何编辑和更新不同 git 分支的文件?
- angular - 如何解决 Angular 中的单元测试用例错误
- javascript - 如何使用 javascript 在 InDesign 中找到两个 GrepPreference?
- rust - 将 Result 上的迭代器转换为 Result
, _> - html - 角标题错误:角不显示我完整的标题
- mysql - 在MYSQL中基于另外两张表创建一个新表
- android-recyclerview - 更换片段后回收站视图丢失
- azure-data-explorer - 是否有 KQL 查询来限制每个特定类别获得的子结果数量?