假设我有一个函数def bar(y: Int, f: Int => Int): Int
。现在,我想使用bar
测试specs2
,并确保调用f
。
如何在没有可变变量的情况下功能。我可以在没有模拟的情况下完成吗?
答案 0 :(得分:6)
var called = false
bar(1, i => { called = true; i + 1 })
assert(called)
修改强>
如何在功能上做到这一点?
假设bar
是纯粹的:
val bar1 = bar(1, i => 0)
val bar2 = bar(1, i => 1)
assert(bar1 != bar2)
但如果bar
不纯净或者如果它未在其输出中使用f
的结果,则无法测试f
的调用{1}}以功能方式。实际上,根据纯度的定义,在调用和现在调用纯函数之间没有可观察到的差异。