Brian が指摘したように、F# の共用体には構造上の等価性があるため、好きなユニット テスト フレームワークを使用することは簡単です。
FsUnit は、NUnit の上に構築された F# 固有のライブラリです。私の個人的なお気に入りの F# 固有の単体テスト ライブラリはUnquote (;) です。これはフレームワークに依存せず、NUnit、xUnit.net、MbUnit など、または FSI 内でも非常にうまく機能します。この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).