我有这个特性,我根据需要将其混合在我的测试套件中:
trait ValidationMock {
def createValidationMock(result: Either[Error, Unit] = Right(())): Validation = {
val validationMock = mock[Validation]
validationMock.validateEligibility(any[Request], any[String])(any[Context]) returns result
}
}
在测试中实例化此模拟时,可以成功编译并测试运行:
val validationMock = createValidationMock()
但是,如果在
validationMock
方法中创建的 createValidationMock
模拟没有在方法中返回,为什么它会起作用?
但是,如果在 createValidationMock 方法中创建的validationMock模拟没有在方法中返回,为什么它会起作用呢?
因为它是:
mockAction.returns
返回ReturnAction[mockAction.type]
(参见代码)apply
返回 ScalaOngoingStubbing[mockAction.type]
(参见代码)[T]
是模拟类型而不是模拟调用的结果类型所以这一切基本上都是
ScalaOngoingStubbing.toMock[Validation](
new StubbingOps(
validationMock.validateEligibility(any[Request], any[String])(any[Context])
) // this wrapper is probably erased by the macros
.returns // ReturnAction[Either[Error, Unit]]
.apply(return) // ScalaOngoingStubbing[Either[Error, Unit]]
) // Validation