Scala Mock Syntax (class _).期望意义?



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...")
}

现在让我们用方法baz定义一个类Bar

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

以及Bar的一个实例:

val bar = new Bar

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

(bar.baz).expects(42)

错误:类栏中缺少方法 baz 的参数列表 未应用的方法仅在需要函数类型时转换为函数。您可以通过编写baz _baz(_)而不是baz来显式进行此转换。

因此,如果没有显式转换为函数,它就不起作用,我们必须通过附加一个_来强制执行这种转换:

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

最新更新