测试一个函数是否在没有模拟的情况下被调用

Test whether a function was invoked without mocking

假设我有一个函数def bar(y: Int, f: Int => Int): Int。现在我想使用 specs2 测试 bar 并确保 f 被调用。

如何在没有可变变量的情况下功能。我可以不用 mocks 吗?

var called = false
bar(1, i => { called = true; i + 1 })
assert(called)

编辑:

How to do it functionally?

假设bar是纯的:

val bar1 = bar(1, i => 0)
val bar2 = bar(1, i => 1)
assert(bar1 != bar2)

但是如果 bar 是不纯的或者如果它没有在输出中使用 f 的结果,则不可能以功能方式测试 f 的调用。事实上,根据纯度的定义,调用和现在调用纯函数之间没有明显的区别。