NUnitでC#のユニットテスト

投稿者: | 2012/04/13

世間でかなり普及してきたアジャイル開発ですが、まったくもって乗り遅れている今日この頃。
会社を辞めて一人でやっているのでそれほど活用できない環境にありますが、
バグをたくさん生成してしまう自分としてはせめてユニットテストくらいは慣れ親しんでおきたいところ。

ということで本棚の奥に埃かぶっていた「アジャイルソフトウェア開発奥義」を取り出しやってみることにしました。買った当初少しだけ読み進めた感じだとけっこういい本だと思いちゃんとやりたいと思っていたわけですが、その時がきました。

とはいえこの本では具体的なテスト環境の構築方法などは書いておらず自分でなんとかするしかありません。
言語としては慣れ親しんでいるC++で、Googleが提供してるgtestなるものを使おうと思っていました。前勤めていた会社ではちょっと使っていたのですがとてもシンプル!で使いやすかったです。
ただ今回は勉強がてらということでより簡単に組めそうなC#でやることにしました。

そこでちょっと調べてみるとVisualStudioにユニットテスト環境が!しかしProfessionalEditionからということ使えず。他にはNUnitが楽そうだったのでやってみました。(ようやっと本題)

手順としては以下のような流れになります。

  1. NUnitのインストール
  2. VisualStudioのプロジェクトを作ってテストされるコードを書く。
  3. Test用のプロジェクトを作ってテストコードを書く。(プロジェクトは分けなくても良いようです。)
  4. Test用のプロジェクトの参照にnunit.framework.dllを追加する
  5. NUnitで実行

 

1.NUnitのインストール
NUnitのサイトからバイナリをインストールします。Windowsインストーラがあるのでこれでインストールするのが楽です。

 

2.VisualStudioのプロジェクトを作ってテストされるコードを書く。
これは普通にクラスライブラリプロジェクトを作ります。ここでは足し算をする関数をつくりました。

namespace sample {
	public class Math {
		public float Add(float a, float b){
			return a+b;
		}
	}
}

 

3.Test用のプロジェクトを作ってテストコードを書く。
テストもクラスライブラリプロジェクトで作りました。でもコンソールアプリケーションプロジェクトでも動いたのでここではどちらでもいいようです。
ポイントはusingで NUnit.Frameworkを追加すること、テストするクラスには[TestFixture]属性、実際にテストする関数には[Test]属性を付けることでしょうか。

using NUnit.Framework;

namespace test {
	[TestFixture]
	public class TestSample {
		[Test]
		public void Func(){
			sample.Math c = new sample.Math();
			float r = c.Add(1.0f,2.0f);
			Assert.AreEqual(3.0f, r);
		}
	}
}

 

4.Test用のプロジェクトの参照にnunit.framework.dllを追加する
Testプロジェクトを右クリックして「参照の設定」から「.NET」タブにnunit.framework.dllがあると思うのでこれを追加します。

 

5.NUnitで実行
さて、最後にNUnitで実行するわけですが、NUnitのインストール先のbinのnunit.exeを実行するとGUIが立ち上がります。これに先ほど作ったTestSampleのdllをドロップします。あとはRunボタンを押すと実行されます。
うまくいけば緑になり、失敗すれば赤くなり、コンソールにおかしいところが表示されます。

でもこのままでは毎回NUnitを実行するためにGUIを起動して、毎回Run、Run押さないといけないので面倒です。こんなんじゃテストする気が失せてしまいます、アジャイルじゃありません。
そんなわけでプロジェクトを実行するとNUnitが立ち上がって実行するようにします。

  1. 実行するプロジェクトのプロパティで「デバッグ」タブを選択、「外部プログラムの開始」を選択し、nunit.exeを指定する。
  2. コマンドライン引数に「(プロジェクトの名前).dll /run」

以上を設定して実行することでGUIが立ち上がり実行されます。

ただ、これもまだ面倒だな。
知りたいのはおかしい個所だけなのでコンソールに一行ずつおかしい個所を表示してくれるだけでいいのだが。


コメントを残す

メールアドレスが公開されることはありません。