使用模拟斯卡拉的存根多参数方法



我正在尝试存根一个具有三个参数的方法,以返回有关其中一个参数的不同响应:

val mocked = mock[MyService]
mocked.someInitialization returns mock[State]
mocked.complexMethod(*, *, *) answers { (_:State, discriminant:Discriminant, _:Delegate[MyService]) => 
discriminant match {
case _:FirstKind => Right(Option.empty[String])
case SecondKind(value:String) => Right(Some(value))
case _ => ???
}
}

但是,我的测试失败并显示上述消息:

SmartNull returned by this unstubbed method call on a mock:
myService.complexMethod(
Mock for State, hashCode: 1730688778,
FirstKind("UnusedValue"),
my.system.FixturesAndMock$FakeDelegate@2b5f8e61
); (of class scala.util.Either$MockitoMock$854506859)

(我不明白">class的scala.util.Both$MockitoMock$854506859"这句话(

请注意:

  • mocked.complexMethod(*, *, *) returns Left(Nil)存根有同样的问题。
  • 使用any[State], any[Discriminant], any[Delegate[MyService]]而不是*, *, *不会改变任何东西。

我在GraalVM上的Scala 2.12.8上使用org.mockito.scalatest.IdiomaticMockito。我做错了什么;如何存根方法以返回计算的答案?

谢谢

我不是 100% 确定,但似乎它是由最后一个参数Delegate[MyService]引起的。我怀疑运行时类型不是存根的匹配类型。

目前,我有一个强制执行Delegate中的类型的方法。使用了我的存根,它通过允许部分函数使我的代码看起来更干净:

given(mock[MyService]).answering {
case (_, _:FirstKind, _) =>
Right(Option.empty[String])
case (_, SecondKind(value), _) =>
Right(Some(value))
}

相关内容

  • 没有找到相关文章

最新更新