【问题标题】:How to mock a method without a parameter list with ScalaMock 5.0.0?如何使用 ScalaMock 5.0.0 模拟没有参数列表的方法?
【发布时间】:2020-07-20 14:59:17
【问题描述】:

当试图模拟声明为的方法时

def foo: Int

val mock = mock[MyClass]
(mock.foo _).expects().returning(10)

我收到一个错误 Error: Methods without a parameter list and by-name params can no longer be converted to functions as `m _`, write a function literal `() => m` instead

有一个提示可以改为编写函数文字,但我不太明白如何将我的代码转换为等效的函数文字。

【问题讨论】:

  • () => mock.foo 不起作用吗?这就是错误消息所要求的内容(虽然没有测试过)

标签: scala unit-testing scalamock


【解决方案1】:

很高兴看到人们已经在使用 ScalaMock 5! 我们在单元测试中的测试用例如下所示:

性状:

def noParamMethod(): String

相关测试:

(() => mockedTrait.noParamMethod()).expects().returning("yey")

代码如下: https://github.com/paulbutcher/ScalaMock/blob/master/shared/src/test/scala/org/scalamock/test/mockable/TestTrait.scala

及其测试: https://github.com/paulbutcher/ScalaMock/blob/22c26174bfb99b403af2be38ab35cabfe58f4c5f/shared/src/test/scala/org/scalamock/test/scalatest/BasicTest.scala#L39

值得一提的是,这只需要 Scala 2.13 来满足该版本中的编译器更改。

【讨论】:

  • 感谢您的回答,但我没有询问带有空参数列表(带有空括号)但没有它(根本没有括号)的方法。具有空参数列表的方法不会产生该错误。不过我明天会测试它,也许我错过了什么:)
  • 似乎我过分简化了我的例子。我将答案标记为已接受,因为它回答了问题。在我的情况下,问题是 foo 在 MyClass 的构造函数中被调用,因此由于上一行中的异常,(mock.foo _).expects().returning(10) 行从未被执行。
猜你喜欢
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
相关资源
最近更新 更多