【发布时间】:2012-01-03 18:08:36
【问题描述】:
我有一堆 F# 函数,它们为相同的输入实现不同的算法,有点像策略模式。为了选择正确的策略,我想对输入参数进行模式匹配并将函数作为值返回:
let equalStrategy points : seq<double> =
...
let multiplyStrategy factor (points: seq<double>) =
...
let getStrategy relationship =
match relationship with
| "=" -> equalStrategy
| "*5" -> multiplyStrategy 5.0
| _ -> raise (new System.NotImplementedException(" relationship not handled"))
现在我想编写一些单元测试来确保我返回正确的策略,所以我在 nUnit 中尝试了类似的东西:
[<TestCase("=")>]
[<Test>]
member self.getEqualstrategy( relationship:string ) =
let strategy = getStrategy relationship
Assert.AreEqual( strategy, equalStrategy )
现在我认为代码是正确的,并且会做我想做的事,但断言失败,因为函数似乎没有定义相等操作。所以我的问题是:
(a) 有没有办法比较 2 个函数以查看它们是否相同,即 let isFoo bar = foo == bar,我可以在 nUnit 断言中使用它吗?
或
(b) 是否有另一个单元测试框架可以在 F# 中为我执行此断言?
【问题讨论】:
标签: unit-testing f# nunit