我想对 fun1 进行单元测试而不调用 fun2。
\n\nlet fun2() =\n // Some complex function with lots of dependencies.\n 1\n\nlet fun1() =\n fun2() * 2\nRun Code Online (Sandbox Code Playgroud)\n\n打破两个函数之间的依赖关系的最佳方法是什么?
\n\n我\xe2\x80\x99尝试了几种不同的方法,但它们只会增加混乱。
\n\n将 fun2 传递给 fun1
\n\nlet fun1(fun2) =\n fun2() * 2\nRun Code Online (Sandbox Code Playgroud)\n\n转换为类并覆盖
\n\ntype FunClass() =\n abstract member fun2 : unit -> int\n default x.fun2() = 1\n\n member x.fun1() =\n x.fun2() * 2\n\ntype FunClassMock() =\n override member x.fun2() = 1\nRun Code Online (Sandbox Code Playgroud)\n\n使用策略模式
\n\ntype Fun1Class(fun2Class) =\n\n member x.fun1() =\n fun2Class.fun2() * 2\nRun Code Online (Sandbox Code Playgroud)\n\n使用变量
\n\nlet fun2Imp() =\n 1\n\nlet mutable fun2 = fun2Imp\n\nlet fun1() =\n fun2() * 2\nRun Code Online (Sandbox Code Playgroud)\n\n有更干净的方法吗?
\n任何方式(至少据我所知)都会“增加混乱”。像这样的事情怎么样?
let fun1() =
fun1_impl(fun2)
let fun1_impl(fun2) =
fun2() * 2
Run Code Online (Sandbox Code Playgroud)
然后,在常规代码中使用fun1,在测试中使用fun1_impl。
| 归档时间: |
|
| 查看次数: |
217 次 |
| 最近记录: |