我使用的冻糕模式如下:
trait A {
def a: Future[String]
}
class B {
this: A =>
def get: Future[String] = a
}
我想创建A
的模拟版本,以便在测试def a
时可以使用Mockito控制B
的结果,有没有办法做到这一点?
答案 0 :(得分:0)
在测试使用类X
的实例的类Y
时,我们通常会提供类Y
的模拟实例。
在这里,您的B
没有使用A
的任何实例,它期望(强制)扩展B
的任何内容也扩展A
。
此外,您会注意到您的课程B
确实是不完整的。如果您选择创建B
的实例,
val b = new B
// <console>:13: error: class B cannot be instantiated because it does not conform to its self-type B with A
// val b = new B
所以。基本上,每当创建B
的实例时,还必须提供A
的实现。
scala> val b = new B with A { def a = Future.successful("well") }
// b: B with A = $anon$1@11ad095c
请注意,每当创建B
的任何实例时,我们如何自由提供A的任何实现。
您可以通过这种方式提供测试用例所需的任何内容。
所以
trait AWithMockedBehaviour1 extends A {
def a = Future.successful("mocked_1")
}
val b = new B with AWithMockedBehaviour1