F#のコードをNUnitでテストする

NaturalSpecのScenarioという属性、NUnitのTestAttributeを継承しているだけなことに気づきました。ということは、Resharperはクラスに指定するTestFixtureAttributeがなくてもメソッドに指定するTestAttributeだけがあればテストと認識するんですね。MSTestを使った場合は、クラスをつくってTestClassAttributeを指定しないとテストだとみなされないんですが。

というわけで、NUnitだけ使ってテストするのもシンプルです。自分みたいに、とりあえずF#動かしてみたいな人におすすめです。最初は、F# Interactiveでいいと思うんですが、ちょっと長めのコードだとよく打ち込むのまちがえてしまうので。

動かすのは簡単。

  1. NUnitをダウンロードする。
  2. nunit.framework.dllに参照を通す。
  3. ソリューションやプロジェクトを選んで「Run Unit Tests」(Resharperの利用を前提)。

次のようなコードで動きます。


module Study

open 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を使うという使い分けです。