fun2 を呼び出さずに fun1 を単体テストしたいと思います。
let fun2() =
// Some complex function with lots of dependencies.
1
let fun1() =
fun2() * 2
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
戦略パターンを使用する
type Fun1Class(fun2Class) =
member x.fun1() =
fun2Class.fun2() * 2
変数を使用する
let fun2Imp() =
1
let mutable fun2 = fun2Imp
let fun1() =
fun2() * 2
よりクリーンな方法はありますか?