测试一个函数是否在没有模拟的情况下被调用
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
的调用。事实上,根据纯度的定义,调用和现在调用纯函数之间没有明显的区别。
假设我有一个函数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
的调用。事实上,根据纯度的定义,调用和现在调用纯函数之间没有明显的区别。