Scala Mock语法(类_)。期望意义?

时间:2018-05-14 15:47:39

标签: scala unit-testing mocking scalamock

Scala的新手,已经广泛搜索了一些ScalaMock语法的说明。根据{{​​3}},我一直看到以下一般测试模式:

(myClass.myMethod _).expects()

这到底发生了什么?类/方法/空格/下划线有什么功能?编译器如何处理这个?

1 个答案:

答案 0 :(得分:0)

附加的_强制将方法转换为函数。

要理解为什么这是必要的,让我们尝试重新构建一小块Scalamock,即expects方法。似乎在模拟对象的方法上调用expects方法。但方法/函数没有expects方法开始。因此,我们必须使用" pimp my library" -pattern将方法expects附加到函数中。我们可以这样做:

implicit class ExpectsOp[A, B](f: A => B) {
  def expects(a: A): Unit = println("it compiles, ship it...")
}

现在让我们使用方法Bar定义一个班级baz

class Bar {
  def baz(i: Int): Int = i * i
}

以及Bar的实例:

val bar = new Bar

让我们看看如果您尝试在expects上调用bar.baz会发生什么:

(bar.baz).expects(42)
  

错误:类Bar中的方法baz缺少参数列表   未应用的方法仅在预期函数类型时转换为函数。您可以通过撰写baz _baz(_)代替baz来明确转换此内容。

因此,如果没有明确转换为函数,它就无法运行,我们必须通过附加_强制执行此转换:

(bar.baz _).expects(42) // prints: "it compiles, ship it..."