VisualStudio2010 Express + NUnit (最新版2.5.8Released)を使ってテストコードを書いてみる
Visual Studio にはテストフレームワークがついているのですが、残念ながらExpressでは使えません。さらにExpressではAdd-inも使えないので何かと不便。有償版を買いたいものの、お財布事情とか勉強用とかの方はどうしてもExpress。ということで、最近、新人向けにテストの講義をしたので、その時使った資料をUPしておきます。備忘録としても。
まずはテストフレームワークのインストールを行います。
- NUnit.orgより、最新版をダウンロードする。今回は最新版2.5.8
- NUnit-2.5.8.10295.msi を落としてきたので、これをたたく
- 今回はCompleteで全部入れます。インストーラの指示に従ってどんどん次へ進んでいく
- [スタートボタン] - [プログラム] - [NUnit 2.5.8] - [NUnit] を選択してGUIが起動すればとりあえず成功
次に、テスト用プロジェクトを作って動作させるところを設定します
- VisualStudioを起動し、[CSharpExam]と[CSharpExamTest]というクラスライブラリのプロジェクトを2つ作る。今回は [D:\Work\CSharpExam] に作成しました。
- インストールしたNUnitを使えるようにします。CShrapExamTestプロジェクトに参照追加より、[.NET]タブの[nunit.framework]のバージョン[2.5.8.10295]コンポーネントを選択
テストコードを早速書いてみます。ありがちな計算クラスを作ります。
- CSharpExamにCalcクラスを作成します
- CSharpExamTestに、CalcTestクラスを作成します
- CSharpExamを使えるようにCSharpExamTestから [参照の追加] - [プロジェクト] - [CSharpExam] を追加します
- NUnitとCharpExamをusingに追加します
- CalcTestのクラス定義の上に、[TestFixture] Attributeを記述して、テストをするためのクラスであることを宣言します
- インストール時に確認した要領で、NUnitGUIを起動し、[File] - [OpenProject] で、[D:\Work\CSharpExam\CShrapExamTest\bin\Debug\CShrapExamTest.dll] を選択します
- Runすると、紫色の?がつきますが、動作することは確認できます
でもこれでは使いにくい。デバッグ実行[F5」で動いた方が嬉しいなー。ということでプロジェクトファイルの設定をちょこっと変えます
- CShrapExamTest.csprojを、テキストエディタ等で開いて編集し、ファイルを保存して閉じます
Debug|AnyCPUのプロパティグループ内に、下記の2行を追加する (※パスはNUitのインストールパス) <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <StartAction>Program</StartAction> <StartProgram>C:\Program Files\NUnit 2.5.8\bin\net-2.0\nunit.exe</StartProgram> ・・・ </PropertyGroup>
ここまで来たらもう1息。今度は、NUnitの起動時に、該当のテストを読み込むように設定します
- [CSharpExamTest] プロジェクトを選択し、右クリックで ”プロパティ”を選択
- [デバッグ] タグの [コマンドライン引数]に、TestのAssemblyのパスを設定する。(この手順では、D:\Work\CSharpExam\CShrapExamTest\bin\Debug\CShrapExamTest.dll)
- [デバッグ開始]で実行した場合、NUnitのGUIが起動し、該当のAssemblyが読み込まれていれば成功。Runを押して、NUnitが走ることを確認します。
ようやく、それっぽく動作するようになりましたので、テストコードを書いてみましょう。まずはAddTestから。
- CalcTestクラスに、[Test]Attributeをつけて、AddTestメソッドを作成します。
- Calcクラスにあるであろう、Addメソッドに、1と2を渡した結果を、3という予想値と比べます
- Addメソッドのところに赤い波線が出て、'CSharpExam.Calcに、'Add'の定義がありません'と出るので、Addの左端の青いラインをクリックして、メソッドスタブを生成します。
- 実行して「レッド」(NG)になることを確認します。これでテストクラスが正しく対象のクラスを呼べていることが確認できるはずです。
CalcTest.cs
[Test] public void AddTest() { int result = Calc.Add(1, 2); Assert.AreEqual(3, result); }
Calc.cs
public class Calc { public int Add(int p, int p_2) { throw new NotImplementedException(); } }
忘れてましたが、テストファーストの原則は、レッド → グリーン →リファクタリングのサイクルで行います。今は最初の「レッド」のところです。「レッド」を確認したところで次に「グリーン」を目指します。
Calc.cs
public int Add(int p, int p_2) { return 3; }
これで、テストコードが正しくかけていることが分かります。その確認がとれたところで実装します。
Calc.cs
public int Add(int p, int p_2) { return p + p_2; }
これでAddメソッドが正しく作成されました。最初はまどろっこしく感じるかも知れませんが、急がば回れ。テストはこんな感じで行います。
※2010/11/30 上記の設定だけだとDebug実行ができない件について、記載しました。
VisualStudio2010 Express + NUnit でDebug実行ができない場合