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

时间:2017-03-08 20:26:02

标签: scala unit-testing mocking specs2

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

如何在没有可变变量的情况下功能。我可以在没有模拟的情况下完成吗?

1 个答案:

答案 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}}以功能方式。实际上,根据纯度的定义,在调用和现在调用纯函数之间没有可观察到的差异。