森理 麟(moririring)のプログラマブログ

ゲームプログラマ森理 麟がのプログラムの話題を中心に書くブログです。

VisualC#2010ExpressにおけるNUnitの基本的な設定の仕方

森理はTDDBC大阪に参加して以来C#でテストにはまっています。

TDDBC岡山には無謀にもTAで参加しました。

フレームワークNUnitを使用しています。

MSTestを使わない理由は、単純にVisualStudio(以下VS)がExpressなので入っていないからです。


C#+NUnitでの基本設定的な所を自分メモとしてまとめておきます。

新しくインストールするならNUnitは必ず2.6以降をダウンロードして下さい。msiがあります。

2.5だと上手く動かない事が何度かありました。

インストール後NUnitを起動したら、先ず「Tools」→「Settings」を押して下さい。

次に「IDE Support」→「Visual Studio」をクリックして「Enable Visual Studio Support」のチェックを付けましょう。

チェックを付けないと実行(exe)ファイルしか選ぶことが出来ません。

チェックを付けることでslnファイルを選ぶ事が出来ます。DebugとReleaseで悩む事もありません。


それではVSでプロジェクトを起動して「参照設定」を右クリックして「参照の追加」を選んで下さい。

次に「.NET」タブから「nunit.framework」を選んで下さい。

以上でテストを書くための準備は完了です。早速テストを書きましょう。

  1. 新しいクラスのファイルを作って下さい。
  2. using NUnit.Frameworkと記載して下さい。
  3. 新しいクラスを作ってメソッドの前に[Test]と書いて下さい。
  4. メソッドを作ってください。テストの場合日本語メソッドもありです。
  5. ビルドしてプロジェクトを保存して下さい。
//TestClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NUnit.Framework;//←ココ

namespace WindowsFormsApplicationTest
{
    class TestClass
    {
        [Test]//←ココ
        public void テストします() //←日本語も可能
        {
        }
    }
}


保存したらNUnitからslnファイルを選ぶのですが、64bitOSだと恐らくエラーが出ると思います。

正直対象者は多いと思うし、この時点で設定が分からず使用しない人も結構いると思います。


さてこの対応は2つあります。1つ目の方法は64bit版の「nunit.exe」ではなくて32bit版の「nunit-x86.exe」を選ぶ事です。

ただ「nunit-x86.exe」は「スタート」→「すべてのプログラム」にはありません。

インストールされたパス(例:C:\Program Files (x86)\NUnit 2.6.1\bin)までいって起動するしかないです。


もう1つは実行ファイルのプラットフォームで「Any CPU」を選ぶ事です。

ただExpressは「Any CPU」を選ぶのがわかりにくいです。こちらを参考にしてください。


どちらかの方法でslnファイルを選んだら先ほど書いたテストが表示されます。次にRunボタンを押して下さい。

これでテストが成功ならNUnitが緑になり、失敗なら赤になります。

さて一応テストが書けて試す環境は整いました。

後はバンバン[Test]を足していきましょう。今回は設定が中心なので、テストの記述はまた別でします。


さて実際にテストを書いてビルドして、NUnitを実行しているとそれが少しずつ手間に感じます。

個人的にはビルドすらしないでテストしたいと思ってますが、これはコンパイルエラーがある場合もあるのでしょうがないと思います。

ビルド後、NUnitをアクティブにして、Runボタンを押すというこの数行程が邪魔です。

また初回やNUnitを閉じてしまった時など、起動していない状態で起動させるのも手間です。


この対応としては「ソリューションエクスプローラー」で「プロジェクトのプロパティ」を選んで右クリックから「プロパティ」を選んで下さい。

「ビルドイベント」タブを選んで「ビルド後に実行するコマンドライン」にnunit.exeもしくはnunit-x86.exeを設定出来ます。

さらに引数に「 /run」を足せば、起動後実行までしてくれます。これ、以外と大きいと思います。

ただこの方法で起動後、NUnitを終了するまでVSが操作出来なくなってしまいます。これが結構邪魔です。

現状操作出来なくなることに関して対応は分かっていません。


さて、別アプローチで今までの問題を全部解決出来る方法があります。

「参照の追加」で「参照」タブよりC:\Program Files (x86)\NUnit 2.6.1\bin\lib\にあるnunit-gui-runner.dllを足して下さい。

次にmainメソッドに直接以下の一文を書きます。
NUnit.Gui.AppEntry.Main(new string[] { System.Windows.Forms.Application.ExecutablePath });

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
//↓この一文を追加、, "/run"を書くと自動実行
NUnit.Gui.AppEntry.Main(new string[] { System.Windows.Forms.Application.ExecutablePath, "/run" }); 
//Application.Run(new Form1());

これだけで今まで上に書いてきた設定をしなくても自動起動、自動実行することが出来ます。

さらにNUnit.Gui.AppEntry.Mainは64bit,32bitを設定しなくても大丈夫です。


また手動実行とNUnit.Gui.AppEntry.Main実行には大きな差があります。

NUnit.Gui.AppEntry.Mainで起動した時は、テストで書いたソースを「デバッグ実行」をします。

つまりテスト中にブレークポイントを貼ればちゃんと止まります。

またテストがレッドの場合、VSの処理としてその行でストップします。


慣れるまで違和感あるかも知れませんが、個人的にはこちらの方が使いやすいと感じています。

テストを書いていると、そのテストコード自体をデバッグしたいことは結構あります。

ただし、普段は最初にレッドになるコードを書くのだから止まるのが邪魔だと思う人もいると思います。

この辺は臨機応変に使い分けたら良いと思います。

個人的にはNUnit.Gui.AppEntry.Mainの方がメリットが多いと感じているので、使い分けもせず、ずっとこっちでやっています。