我正在尝试测试一个函数,但是我正在测试的函数调用了我想要存根的traits函数。我似乎无法使用ScalaMock存根此函数,因为我无法模拟对象。
trait[A<:CommonReturn] commonTrait[A] {
def commonFunction(s:String):(String,String) = {
("Hello","World")
}
def testMe(s:String) : A
}
然后,许多对象扩展此特征,每个对象实现 commonTrait 并返回其特定的公共返回子类型。
object ob extends commonTrait[ConcreteType] {
override def testMe(s:String){
val(x,y) = commonFunction(s)
val z = "unique logic"
ConcreteType(x,y,z)
}
}
因此,我现在试图测试 ob.testMe,但是我似乎无法模拟ob对象,因此无法存根公共函数。
这是由于我的架构吗?或者是否可以使用 scalamock 模拟对象并使用 scalatest?
val mocked = mock[ob]
(mocked.commonFunction _).expect(*).returning("test","test")
这不会编译。
你不能用 ScalaMock 模拟对象,因为 mock[X] 是 X 的子类。
如果您需要使用此通用函数
测试协作,那么继承会使其变得相当困难。我会考虑使用依赖注入来设计它。