[コラム] F# で NUnit するには
To write unit-tests with F# and NUnit, as follows.
- Add reference to nunit.framework
- To declare the class, use the "type" keyword. Then, add "TestFixture" attribute.
- To declare the instance-method, use the "member" key word. And, give "Test" attribute.
Please look at the following sample code. Enjoy Test-First!
F# は、 無償でも使えます。となると、 TDD.NET としてはテストファーストしてみないわけにはいけません。
といっても、 NUnit への参照を設定してあげれば、 Assert クラスを呼び出すことは普通にできます。 あとは、 TextFixture などの属性をちゃんと付けたクラス定義が出来ればよいだけですから、 分かってしまえば難しいことはありません。 いつもの FizzBuzz をテストするコードは、 次のようになります。 コメントに C# との対比を書きました
namespace FizzBuzzByFSharp
open System //using 宣言
open NUnit.Framework
open FizzBuzzByFSharp.FizzBuzz
[<TestFixture()>]
type FizzBuzzTest() = //クラス宣言
[<TestCase(1, "1")>]
[<TestCase(2, "2")>]
[<TestCase(3, "Fizz")>]
[<TestCase(5, "Buzz")>]
[<TestCase(15, "Fizz Buzz")>]
member x.SayTest n expected :unit = //インスタンスメンバー関数 SayTest
Assert.AreEqual(expected, FizzBuzz.Say(n))
クラス宣言には括弧 「()」 が必要です。 それが無いと、 引数無しのコンストラクターが生成されないため、 NUnit ランナーから呼び出せません。
インスタンスメンバー関数の 「x」 は、 y でも z でも、 お好きに。
上の例では、 テストメソッド SayTest の引数は、 n と exptected だと思って ( とりあえず ) OK です。 引数に型指定をしていませんが、 コンパイラーが型推論してくれます。 明示的に型指定をしたければ、 「n expected」 のところを 「(n:int) (expected:string)」 のように書きます。
また、 テストメソッド SayTest の戻り値の型として 「:unit」 と書いてあります。 これは void 型と同じだと思って ( とりあえず ) OK です。 戻り値の型も、 書かなくてもコンパイラーが型推論してくれます。
このテストコードでは、 テスト対象の製品コードは 「FizzBuzz.Say(n)」 となっています。 C# 的に言えばスタティックメソッドですね。 製品コードは次のようです。
module FizzBuzzByFSharp.FizzBuzz //Moduleといえば、VBでおなじみ。 C# 的にはスタティッククラス
let Say (n:int) :string = //スタティックな関数 Say
if (n % 15) = 0 then "Fizz Buzz"
elif (n % 3) = 0 then "Fizz"
// ...以下省略 (...omitted)
なお、 NUnit 2.5.5 で試しましたが、 まだ F# のプロジェクトファイルは認識してくれませんでした。 テストコードが入ったアセンブリを直接開く必要があります。
| 固定リンク
「*コラム」カテゴリの記事
- MSTest‐Windows ストア アプリ開発の暗黒大陸 #win8dev_jp #tddadventjp #tddnet(2013.12.13)
- TDD って何だっけ? #tddadventjp(2013.12.06)
- [コラム] テストファーストとは何か?(2012.12.24)
- [コラム] Visual Studio 11 に統合できるテスティング フレームワーク(2012.03.22)
- [コラム] TDD のパターン: Assert First(2012.02.09)
「<NUnit>」カテゴリの記事
- [NEWS] NUnit Test Adapter for VS 2012 and 2013 1.0 RC(2013.09.17)
- [NEWS] NUnit 2.6.2 リリース ~ async/await に対応!(2012.11.16)
- [NEWS] NUnit 2.6.1 リリース ~ NuGet に対応(2012.08.17)
- [記事紹介] CodeZine ~ C#で始めるテスト駆動開発 第4回/第5回(2012.07.10)
- [記事紹介] CodeZine ~ C#で始めるテスト駆動開発 第2回/第3回(2012.04.13)
この記事へのコメントは終了しました。
コメント