初めまして、miyazakiです。今年からこちらでお世話になることになりました。よろしくお願いします!
初めての投稿なのでものすごく緊張していますが、さっそく本題に入っていきたいと思います。
VB.NETの環境でNUnitを使うことになったので入れてみました。
参考ページ
NUnit 2.5 の導入 Step by Step
VB2010 Express + NUnit 2.5 で、 初めてのTDD Step by Step
参考にしたページと同じ環境だったのと、とても詳しく分かりやすく書かれていたので、インストールから動かしてみるまでサクサク進めました。
なのでこちらではメモ程度に書いていきたいと思います。
まずはインストール。
NUnitのページのDOWNLOADから”NUnit-2.5.10.11092.msi”をクリックしインストール。
インストールすると中にサンプルが入っているので、とりあえずそちらを動かしてみることにします。
ソリューションを開くと、このプログラム古いから今の環境で動くようにしろ、と言われるので指示に従ってコンバート。
コンバートして開けたところでビルドするんですが、元が古いということでプロジェクトで参照されているnunit.frameworkも古いです。新しいほうを参照させる必要があります。
NUnitをインストールしたドライブ\NUnit 2.5.10\net-2.0\framework内にnunit.framework.dllがあるので、プロジェクトごとに設定しなおしていきます。
これでビルドが通りました。
ビルドに成功したところでNUnitを起動。このままだとVisual Studioのファイルが開けないので、
[Tools] > [Settings…]から[IDE Support]を選択し[Enable Visual Studio Support]という項目にチェックを入れておきます。
これでNUnit側でサンプルを開くことができます。
読み込み時にdllファイルが見つからないエラーが出る場合は、
[Project] > [Configurations] > [2 Release]
を選択します。
あとはRunを押すとテストされるかと思います。こんな感じで。
赤い部分がテスト失敗。緑の部分が成功しているということを表しています。
では、実際にプロジェクトを作ってやっていきたいと思います。こちらも参考ページにバッチリ書いてあるので大まかな部分とテストの記述部分のみ触れていきます。
構成としてはメインプログラムとテスト用とプロジェクトを分けて作成します。
テスト用プロジェクトに関してはクラスライブラリで作成し、NUnitから呼び出して使うためにdllとして作ります。
参照設定は先ほども出たnunit.frameworkと、メインプロジェクトを設定しておきます。
テストケース部分
Imports FizzBuzz
Imports NUnit.Framework
Public Class FizzBuzzerTest
'Fizz Buzz - 数字を数え、3の倍数でFizz、5の倍数でBuzz、3と5の倍数でFizzBuzz
Public Sub SayNextTest_1回目は1_1()
Dim obj As FizzBuzzer = New FizzBuzzer()
Dim result As String = obj.SayNext()
Assert.AreEqual("1 - 1", result) 'Assert.AreEqual(期待値, 検査したい値)
End Sub
End Class
NUnitはTestFixture()を見て「このクラスにテストケースがある」ということ、Test()で「このメソッドがテストケース」であることを判断します。
Assert.AreEqual()ですが、このプログラムはFizz Buzzをしているので、この場合1回目の期待値は”1-1″、検査する値はSayNext()(数字、Fizz、Buzzのいずれかを返す)で返ってくる値になります。
また、テストケースを増やすうえで、同じような処理がある場合はまとめて書くことができます。
Public Class FizzBuzzerTest
'同じような処理をするテストはTestCaseを使うことでまとめて書ける
'1のとき
'2のとき
'3のとき
Public Sub SayNextTest(ByVal count As Integer, ByVal expected As String)
Dim obj As FizzBuzzer = New FizzBuzzer()
Dim result As String = Nothing
For i As Integer = 1 To count
result = obj.SayNext()
Next
Assert.AreEqual(expected, result) 'Assert.AreEqual(期待値, 検査したい値)
End Sub
End Class
と、こんな感じでテストケースを書いては実装を繰り返し、無事すべてのケースをグリーンにさせることができました!