F# で使われるユニットテスティングフレームワークなどの紹介
前にもかいたことがある気がするけれど、2017年度版ということでどうか。 "フレームワーク"と書きつつライブラリも混ぜます。
NUnit
- よくみかけるやつその1
- 古の時代から存在するとされている
- 最近になってウェブサイトがモダンに
- 地味に進化を続けている
- .NET Coreに対応している
最近だと
今更だけどNUnitにMultiple Assertってのが追加されてた。便利やん。https://t.co/dWNF8CNUUD
— miyazaki (@htid46) 2017年9月22日
という話を見かけて「へぇ〜」っとなった。
しかしこのAssert.Multiple
はどうやって動いているのだろう…?
個人的にもう使う機会はないだろうと思いつつ、なんだかんだ参考になることがあるのでソースは読むだろう。 なんとかUnitに慣れている人ならかける。
xUnit.NET
- よくみかけるやつその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
- 最近話題にのぼることが多い気がする
- F#向け
- 確かFuchuというフレームワークのfork
- いろんな機能がある
- https://github.com/adamchester/expecto-adapter を使えば.NET Core SDKでも実行できるはず
後述する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
- テスティングフレームワークと書いてあるが、モックライブラリと認識している人が多い気がする
おわり
数年前に比べて選択肢は増えたが、まだまだ競合が少ない気がする。