【发布时间】:2020-09-05 01:51:06
【问题描述】:
说我有特质:
trait A {
def a(): Boolean
}
还有模拟+测试用例:
trait Fixture {
val mockA = mock[A]
(mockA _).returns(true)
}
"mock must return true" in new Fixture {
mockA() must equal(true)
}
现在,我想将同一测试套件中单个测试的值重新模拟为 false
trait ChildFixture extends Fixture {
(mockA _).returns(false) // this obviously doesn't work
}
"mock must return false" in new ChildFixture {
mockA() must equal(false)
}
这是一个非常简化的示例,我有一个复杂的模拟装置依赖链。显而易见的答案是将mockA 的模拟代码提取到另一个夹具中,然后混合到应该为真的那些中,然后为应该为假的特定测试制作一个新夹具。唯一的问题是,鉴于我的测试代码,这是一个繁重的过程。也可以用匿名类和var手动mock返回,但是这样看起来不太优雅,失去了Scala mock调用验证的功能。
是否可以为单个测试重新创建已模拟的对象?
【问题讨论】:
-
您的灯具是如何工作的?为什么不能选择
override val之类的东西? -
@MateuszKubuszok 用夹具设置更新了问题。我没有想到
override val,但不幸的是它不起作用。它会在父夹具的模拟设置代码中导致空指针异常。