TL;DR

テストが失敗したとき、失敗に至るまでのすべての値を表示するのが特徴の F# のテスティングフレームワーク。

仕組み

アサーションは専用の DSL ではなく、静的に型検査される F# の引用式(<@ ... @>)で書く。中心となる関数は test で、bool を返す引用式を受け取る。単純な比較には =! や >! などの演算子を使える。

アサーションが失敗すると、式を 1 段階ずつ簡約した途中の値を、最終的な結果まで順に表示する。

xUnit.net、NUnit、MSTest など、例外でテストの失敗を伝えるフレームワークと設定なしで組み合わせられる。F# Interactive でも使える。

例

[<Fact>]
let ``demo Unquote xUnit support`` () =
    test <@ [3; 2; 1; 0] |> List.map ((+) 1) = [1 + 3..1 + 0] @>

このテストは失敗し、次のように簡約の過程が表示される。

[3; 2; 1; 0] |> List.map ((+) 1) = [1 + 3..1 + 0]
[4; 3; 2; 1] = [4..1]
[4; 3; 2; 1] = []
false

関連

出典