如果我不返回 Mock,为什么返回类型是正确的?

问题描述 投票:0回答:1

我有这个特性,我根据需要将其混合在我的测试套件中:

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
模拟没有在方法中返回,为什么它会起作用?

scala mockito-scala
1个回答
0
投票

但是,如果在 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
© www.soinside.com 2019 - 2024. All rights reserved.