我想单元测试fun1而不调用fun2。如何在F#中打破函数依赖关系?
let fun2() =
// Some complex function with lots of dependencies.
1
let fun1() =
fun2() * 2
什么是打破两个函数之间依赖关系的最好方法?
我试过了几种不同的方法,但它们只是增加了混乱。
通FUN2到FUN1
let fun1(fun2) =
fun2() * 2
转换为一个类并重写
type FunClass() =
abstract member fun2 : unit -> int
default x.fun2() = 1
member x.fun1() =
x.fun2() * 2
type FunClassMock() =
override member x.fun2() = 1
使用stategy模式
type Fun1Class(fun2Class) =
member x.fun1() =
fun2Class.fun2() * 2
使用可变
let fun2Imp() =
1
let mutable fun2 = fun2Imp
let fun1() =
fun2() * 2
有一个更清洁的方式?
全局变量总是 – nicolas 2013-04-08 15:19:35
我不想暗示有什么不对您的问题的最佳解决方案 - 这是完全合法的 - 但我只是想知道你为什么要这么做?它背后的真实情况是什么? (我认为这可能有助于找到正确的答案......) – 2013-04-08 17:32:55
我在许多真实世界的场景中看到了这个问题。主要是财务计算。所以x = a + b/c,其中b和c是复杂计算的结果。在大多数情况下,我创建了类(aCalculator(),bCalculator())并将它们传递给我的xCalculator(),策略模式样式,但这似乎并不实用,我想知道是否缺少更好的方法。 – 2013-04-09 13:35:47