F#のコードをユニットテストで検証する その3(xUnit)
前回と同じく Visual Studio 2013 のテストエクスプローラーから xUnit.net を使ったユニットテストを行います。今回は1つのテスト関数に複数のテストデータを渡す方法を試します。
xUnit.net を使ったコードの例
- module Sample2
- open Xunit
- let fibonacci (nth: int) : int=
- let rec auxFib (acc1: int) (acc0: int) (count: int) : int =
- match count with
- | 0 -> acc0
- | 1 -> acc1
- | _ -> auxFib (acc1 + acc0) acc1 (count - 1)
- auxFib 1 0 nth
- [<Theory>]
- [<InlineData( 0, 0)>]
- [<InlineData( 1, 1)>]
- [<InlineData( 2, 1)>]
- [<InlineData( 3, 2)>]
- [<InlineData( 4, 3)>]
- [<InlineData( 5, 5)>]
- [<InlineData( 6, 8)>]
- [<InlineData( 7, 13)>]
- [<InlineData( 8, 21)>]
- [<InlineData( 9, 34)>]
- [<InlineData(10, 55)>]
- [<InlineData(11, 89)>]
- [<InlineData(12, 144)>]
- [<InlineData(13, 233)>]
- [<InlineData(14, 377)>]
- [<InlineData(15, 610)>]
- let ``Fibonacci number``(nth: int, expected: int) : unit =
- let actual = fibonacci nth
- Assert.Equal(expected, actual)
4行目の fibonacci というフィボナッチ数列の第 n 項(n は0以上の整数)を求める関数をユニットテストの対象とします。
12行目 Theory アトリビュートをテスト関数 ``Fibonacci number`` (29行目から始まる)に付加します。
Theory 以降に続く13~28行目の InlineData アトリビュートの引数で指定したテストデータが ``Fibonacci number`` の引数として渡ります。InlineData からデータを渡す回数分のテストが実行されます。ここでは16個のテストデータを置いたので16回のテストが実行されることになります。
テストデータ用のフィボナッチ数の値は、サイト「THE ONーLINE ENCYCLOPEDIA OF INTEGER SEQUENCES® 」からお借りしました。
ユニットテストの実行結果
テスト関数の定義は一つですが16回のテストが実行されていることがわかります。