正如 Brian 指出的,由于 F# 联合具有结构相等性,因此使用您喜欢的任何单元测试框架都很容易。
FsUnit 是构建在 NUnit 之上的 F# 特定库。我个人最喜欢的 F# 特定单元测试库是Unquote http://code.google.com/p/unquote/, ;),它与框架无关,可以与 NUnit、xUnit.net、MbUnit...甚至在 FSI 中很好地配合。您可能感兴趣this https://stackoverflow.com/questions/5667372/what-unit-testing-frameworks-are-available-for-f/5669263#5669263与 FsUnit 的比较。
那么,如何使用 NUnit + Unquote 来做到这一点呢?这是一个完整的工作示例:
module UnitTests
open NUnit.Framework
open Swensen.Unquote
type AST =
| Variable of string
| Class of string
| Number of int
let mockFParsec_parseVariable input = Variable(input)
[<Test>]
let ``test variable parse, passing example`` () =
test <@ mockFParsec_parseVariable "x" = Variable("x") @>
[<Test>]
let ``test variable parse, failing example`` () =
test <@ mockFParsec_parseVariable "y" = Variable("x") @>
然后使用TestDriven.NET运行测试,输出如下:
------ Test started: Assembly: xxx.exe ------
Test 'UnitTests.test variable parse, failing example' failed:
UnitTests.mockFParsec_parseVariable "y" = Variable("x")
Variable "y" = Variable("x")
false
C:\xxx\UnitTests.fs(19,0): at UnitTests.test variable parse, failing example()
1 passed, 1 failed, 0 skipped, took 0.80 seconds (NUnit 2.5.10).