0

我正在对使用不同方式(使用 NUnit 和 FsUnit)制作相同内容的三个函数进行测试。我想使用 TestCase 所以我不必复制/粘贴很多代码。我将此作为编译错误消息:“这不是有效的常量表达式或自定义属性值”。有没有办法解决这个问题?

程序.fs

let calculateEvenNumbersWithFilter = ...

let calculateEvenNumbersWithMap = ...

let calculateEvenNumbersWithFold = ...

测试.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
4

1 回答 1

0

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

当然,在以这种方式使用属性时,我们使自己受到了这种限制,但这对于我们设计的下一个框架来说是一个问题。

您正在尝试做的是非常优雅和(当然)功能。NUnit 通常需要数据参数而不是函数参数来测试用例。但是,如果您可以通过参数,这将起作用。

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

很遗憾,我无法将答案翻译成可以为您工作的 F# 代码,但既然您已经走到了这一步,我敢打赌您可以弄明白。:-)

于 2019-07-09T22:06:51.750 回答