F# で使われるユニットテスティングフレームワークなどの紹介

前にもかいたことがある気がするけれど、2017年度版ということでどうか。 "フレームワーク"と書きつつライブラリも混ぜます。

NUnit

http://nunit.org/

  • よくみかけるやつその1
  • 古の時代から存在するとされている
  • 最近になってウェブサイトがモダンに
  • 地味に進化を続けている
  • .NET Coreに対応している

最近だと

という話を見かけて「へぇ〜」っとなった。 しかしこのAssert.Multipleはどうやって動いているのだろう…?

個人的にもう使う機会はないだろうと思いつつ、なんだかんだ参考になることがあるのでソースは読むだろう。 なんとかUnitに慣れている人ならかける。

xUnit.NET

https://xunit.github.io/

  • よくみかけるやつその2
  • .NET Foundationのもちもの
  • .NET Coreに対応している

コミュニティ的なリソースがあるためか、開発速度がダントツで早い気がする。 .NET界隈(特にC#界隈)のデファクトになる(なっている?)のではないでしょうか。

個人的には、F#製ではないフレームワークの中でならAssertionが好みなのでこれを選ぶ。

MSTest

https://github.com/Microsoft/testfx

  • かつてVisual Studioに標準搭載されていたやつ
  • .NET Coreに対応している

特筆すべきことはない…私が知らないだけかもしれませんが。 新規で使う理由も、特にない…?

FsUnit

https://fsprojects.github.io/FsUnit/

  • NUnitやxUnit.NETといったどちらかといえばC#, VB.NET向けフレームワークAPIをラップしたもの
  • FsUnitTypedというモジュールを使えばAssertionの型チェックを厳密に行える

F# 界隈では一時期みんなこれを使っていたような…今はどうかわからない。 個人的には、shouldみたいなAPIを覚えていられない記憶力になったので使わないと思います。

FsCheck

https://fscheck.github.io/FsCheck/

  • Propery Based TestingとかRamdom Testingとか呼ばれる類のツール
  • 一応単独で実行できる仕組みがある
  • とはいえ、他のテスティングフレームワークと組み合わせる場合がほとんど

Persimmon以外のテスティングフレームワークなら使わない選択肢がない。

expecto

https://github.com/haf/expecto

後述するPersimmonとは違う意味で独特なAPIです。 コンピュテーション式を使い分けることでSync、Async向けテストをかき分けられる。

私にはPersimmonがあるので使わないですが、興味がある方はさわってみると良いかも。

Persimmon

http://persimmon-projects.github.io/Persimmon/

  • F#向けというかF#専用
  • APIが独自路線な関係でいろんなライブラリを再実装している
  • .NET Coreでも一応動く
  • コア開発者が日本人

ライブラリはなぜか色々ある。 名前と機能の関連がわかりにくいという噂あり。

開発者バイアスがかかるので所感は書きません。

unquote

http://www.swensensoftware.com/unquote

  • F#でpower assertしたい的なやつ

他言語のpower assertに比べるとちょっと見劣りする気がしなくもない…?

canopy

http://lefthandedgoat.github.io/canopy/

  • Web UIテスト

F#でかけるよやったね、以上も以下もない気がする。

Foq

https://github.com/fsprojects/Foq

  • テスティングフレームワークと書いてあるが、モックライブラリと認識している人が多い気がする

おわり

数年前に比べて選択肢は増えたが、まだまだ競合が少ない気がする。