Roy*_*lor 5 unit-testing scala mocking scalamock
Scala 新手,已广泛搜索以澄清某些 ScalaMock 语法。根据本指南,我不断看到以下一般测试模式:
(myClass.myMethod _).expects()
这里到底发生了什么?类/方法/空格/下划线有什么功能?编译器如何处理这个问题?
附加强制_
将方法转换为函数。
为了理解为什么这是必要的,让我们尝试重新构建 Scalamock 的一小部分,即方法expects
。该expects
方法似乎是在模拟对象的方法上调用的。expects
但方法/函数一开始就没有方法。因此,我们必须使用“pimp my library”模式将方法附加expects
到函数。我们可以这样做:
implicit class ExpectsOp[A, B](f: A => B) {
def expects(a: A): Unit = println("it compiles, ship it...")
}
Run Code Online (Sandbox Code Playgroud)
现在让我们Bar
用方法定义一个类baz
:
class Bar {
def baz(i: Int): Int = i * i
}
Run Code Online (Sandbox Code Playgroud)
还有一个实例Bar
:
val bar = new Bar
Run Code Online (Sandbox Code Playgroud)
让我们看看如果您尝试调用expects
on会发生什么bar.baz
:
(bar.baz).expects(42)
Run Code Online (Sandbox Code Playgroud)
错误:类 Bar 中的方法 baz 缺少参数列表 仅当需要函数类型时,未应用的方法才会转换为函数。
baz _
您可以通过编写或baz(_)
代替 来明确此转换baz
。
因此,如果没有显式转换为函数,它就无法工作,我们必须通过附加以下内容来强制执行此转换_
:
(bar.baz _).expects(42) // prints: "it compiles, ship it..."
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1581 次 |
最近记录: |