【问题标题】:Mock a method from implicit class in specs2从 specs2 中的隐式类中模拟一个方法
【发布时间】:2014-11-23 07:06:48
【问题描述】:

假设我有一个类和一个相关的隐式类:

class Project
implicit class RichProject(p:Project) {
  def searchFile(keyword:String):Seq[File] = {
    p.getFiles.filter(_.name.contains(keyword))
  }
}

然后我想在 specs2 测试中为 project 模拟 searchFile 方法:

val project = mock[Project]
project.searchFile("aa") returns Seq(new File("/aaa"))

但它报告了一个NullPointException,它似乎在真实的searchFile 中运行,而不是模拟它。

有办法解决吗?

【问题讨论】:

    标签: scala mocking mockito specs2


    【解决方案1】:

    当您编写project.searchFile 时,searchFile 不是属于模拟对象的方法,而是属于RichProject 类。所以 Mockito 不能模拟它并会尝试执行它。

    除了模拟 RichProject 类本身之外,我没有解决此问题。

    【讨论】:

    • 谢谢埃里克。 RichProject 将被隐式创建,它不会出现在被测试的方法中(因为我们可以直接使用project.searchFile),我该如何传入模拟的RichProject
    • 您也许可以覆盖 implicit def RichProject(p:Project) 方法,以便它始终返回 RichProject 的模拟。
    • 所以我们必须使用implicit def 而不是implicit class 以使其可模拟,对吧?
    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 2013-06-04
    • 2014-08-13
    • 2014-04-08
    • 2017-01-05
    相关资源
    最近更新 更多