【问题标题】:Stubbing multi parameters method with mockito-scala使用 mockito-scala 存根多参数方法
【发布时间】:2020-01-07 09:36:06
【问题描述】:

我正在尝试使用三个参数对方法进行存根,以返回关于其中一个参数的不同响应:

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)

(我不明白句子“of class scala.util.Either$MockitoMock$854506859”)

注意:

  • 使用mocked.complexMethod(*, *, *) returns Left(Nil) 存根存在同样的问题。
  • 使用any[State], any[Discriminant], any[Delegate[MyService]] 代替*, *, * 不会改变任何内容。

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

谢谢

【问题讨论】:

    标签: scala testing stubbing mockito-scala


    【解决方案1】:

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

    此时我有一个方法可以强制Delegate 中的类型。使用了我的存根,它通过允许部分函数使我的代码看起来更清晰:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多