TL;DR

軽量な F# のテスティングフレームワーク。NUnit のような [<Test>] 属性を必要とせず、普通の関数でテストを書く。

仕組み

Expecto ではテストを値として書く。値なので、ほかのデータと同じように組み合わせたり、絞り込んだり、繰り返したりできる。

テストはデフォルトで並列かつ非同期に実行される。そのため、テストどうしでグローバルな状態を共有しないようにするか、順番に実行するよう指定する必要がある。テストは runTestsWithCLIArgs で実行し、失敗したテストがあれば 1、なければ 0 を返す。

FsCheck を使ったプロパティベーステストの API や、2 つの関数の実行時間を統計的に比べる Expect.isFasterThan も持っている。

例

open Expecto
 
let tests =
  test "A simple test" {
    let subject = "Hello World"
    Expect.equal subject "Hello World" "The strings should equal"
  }

注意点

テストが並列で実行されるので、共有する状態があるテストはそのままでは不安定になる。

関連

出典