F#のコードをNUnitでテストする
NaturalSpecのScenarioという属性、NUnitのTestAttributeを継承しているだけなことに気づきました。ということは、Resharperはクラスに指定するTestFixtureAttributeがなくてもメソッドに指定するTestAttributeだけがあればテストと認識するんですね。MSTestを使った場合は、クラスをつくってTestClassAttributeを指定しないとテストだとみなされないんですが。
というわけで、NUnitだけ使ってテストするのもシンプルです。自分みたいに、とりあえずF#動かしてみたいな人におすすめです。最初は、F# Interactiveでいいと思うんですが、ちょっと長めのコードだとよく打ち込むのまちがえてしまうので。
動かすのは簡単。
次のようなコードで動きます。
module Studyopen NUnit.Framework
let mul x y = x * y
let add x y = x + y[<Test>]
let ``test mul``() =
Assert.AreEqual(10, mul 5 2)[<Test>]
let ``test add``() =
Assert.AreEqual(3, add 1 2)
NaturalSpecは英語の文章みたいかけておもしろいのですが、どうだろう、慣れてないだけかもしれませんが、テスト対象以外のところに気をとられてしまって自分としてはしっくりしません。
ちょと毛色のちがうテストツールとして、FsCheckというものがありますが、FsCheck + NUnitの組み合わせがいいかもと思っています。実際のテストはFsCheckで、それぞれのテストのエントリポイントとしてNUnitを使うという使い分けです。