我正在使用 scalatest 对扩展特征的类进行单元测试(从某种意义上说,我的类将特征用作 mixin)。
该特征包含的方法是辅助方法(最终调用数据库中的一些查找),我想将其存根,以便我可以仅隔离我的类的功能。但是我还没有找到像 Mockito 或 ScalaMock 这样的框架来实现这一点。
问题:可以使用模拟框架来实现吗?如果可以,如何实现?如果没有,我很想知道是否有原因。
例如。
trait MyTrait {
def usefulMethod(i: int) = {...}
}
class MyClass extends MyTrait {
def numberCruncher = {
val x = usefulMethod(1) + 1
}
}
我需要根据 i 的值返回不同的存根答案。类似于 Mockito 的东西 when(myTrait.usefulMethod(1)).thenReturn(10)
我还需要验证是否在具有正确值的特征中调用了不同的方法。
本质上,我是在再次问这个问题,但我注意到这是在 2011 年提出的,事情可能已经发生了变化。可能会有新的框架和新的方法。这个 2001 年的问题也没有询问如何验证特征中的方法。
问题:以这种方式使用 traits-as-a-mixin 是否实际上阻止了使用模拟框架对来自 mixin 的模拟/存根方法进行单元测试的能力?即模拟和存根框架是否依赖于依赖注入的使用?
PS。直到现在我一直在使用 Mockito,但我并不反对使用 scalamock 或任何其他框架。我研究了 scalamock,因为它宣传它可以测试特征,但是从 scalamock 自己的测试看来,虽然它可以模拟特征,但如果该特征作为依赖项传递给类而不是类,则只能存根模拟行为扩展该特征。看这里