【问题标题】:Mocking a void function in Scala with Mockito?用 Mockito 在 Scala 中模拟一个 void 函数?
【发布时间】:2015-03-09 18:35:36
【问题描述】:

我正在尝试验证是否调用了记录器。问题是它返回 void,因此建议我使用 spy 而不是 stub。不幸的是,间谍的行为很古怪(不工作)。理想情况下,我还想删除“味精”并使用匹配器。

代码如下。我也尝试了https://stackoverflow.com/a/24150445/555493 给出的方法,但仍然遇到类似的错误。

//setup spy
val logger = spy(new Logger)
logger.debug(msg)

//call code

//verify
there was one(logger).debug(msg)

我收到此错误:

The mock was not called as expected: 
Argument(s) are different! Wanted:
logger.debug(
 ($anonfun$apply$mcV$sp$1) <function0>
);
-> at HttpHealthCheckSpec$$anonfun$35$$anon$11$$anonfun$11.apply$mcV$sp(HttpHealthCheckSpec.scala:176)
Actual invocation has different arguments:
logger.debug(
 ($anonfun$setupMock$1) <function0>
);
-> at HttpHealthCheckSpec.setupMock(HttpHealthCheckSpec.scala:58)

【问题讨论】:

    标签: scala mocking mockito scalatest spy


    【解决方案1】:

    似乎问题在于记录器接受了一个按名称调用参数的字符串。根据https://stackoverflow.com/a/2158709/555493,解决方案相当难看。不幸的是,Mockito 不能模拟字符串。因此,另一种解决方案是使用 specs2,其中已修复 Mockito 以正确匹配按名称调用的参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 2017-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多