无法使用具有3种不同功能的TestCase

时间:2019-07-09 20:58:55

标签: f# nunit fsunit

我正在测试使用不同方法(使用NUnit和FsUnit)完成相同功能的三个功能。我想使用TestCase,所以我不必复制/粘贴很多代码。我将其作为编译错误消息:“这不是有效的常量表达式或自定义属性值”。有什么办法可以解决问题?

Program.fs

let calculateEvenNumbersWithFilter = ...

let calculateEvenNumbersWithMap = ...

let calculateEvenNumbersWithFold = ...

Tests.fs

open FsUnit
open NUnit.Framework
open Program

[<TestCase(calculateEvenNumbersWithFilter)>]
[<TestCase(calculateEvenNumbersWithFold)>]
[<TestCase(calculateEvenNumbersWithMap)>]
let ``Smoke test`` (func) =
    func [1;2;3;4] |> should equal 2

1 个答案:

答案 0 :(得分:0)

这是.NET的限制。只有常量和某些受限制的数据类型可以用作 any 属性的参数。它不是特定于NUnit的。

当然,通过这种方式使用属性,我们使自己受此限制,但这是我们设计的下一个框架的问题。

您试图做的是非常优雅的(当然)是实用的。 NUnit通常期望数据参数而不是功能参数来测试用例。但是,如果可以传递参数,这将起作用。

做到这一点的方法是使用TestCaseSource属性。给它一个包含三个函数的静态数组的名称,它应该(最终)起作用。

很遗憾,我无法为您将答案转换为有效的F#代码,但是既然您已经走了这么远,我敢打赌,您可以找出答案。 :-)