C# Tips


ユニットテストを行うには(NUnitについて)


C#にもUnitテスト用のフレームワークが存在します。
現在、NUnitというものがいちばんポピュラーなようです。
以下のサイトから入手できます。
http://nunit.org/

以下の例では、QuestionというクラスのUnitテストを実現しています。
手順は以下のとおりです。

1. NUnit.Frameworkネームスペースを使用できるようにする。
Visual C#ではAdd Referenceで.NETのタブからnunit.frameworkを選択することでプロジェクトに追加することができます。

2. テストコードを書く。テストファーストを実現するためにはテストコードから書きます。ただ、Visual Studioのコード補完機能を利用するには、ある程度アプリケーションコードを書いてからのほうが良い気もします。
テストコードの基本は、テストクラスに[TestFixture]、テスト用の関数に[Test]と記述します。具体的には、以下のコードを参考にしてください。

3. アプリケーションコードを書く。あとは、アプリケーション用のコードを書くだけです。

4. NUnitでテストをする。コンパイルがすべて通ったら、NUnitを使用してテストをします。NUnit GUIを立ち上げて、コンパイル済みのアプリケーションのプロジェクトファイルをオープンします。NUnitが自動的にテストコードを検出するので、あとは、Runボタンを押してテストをします。グリーンランプが付けばすべてのテスト結果は良好です。赤くなった部分があればコードを修正し、コンパイルした後、再びNUnitのRunボタンを押します。

本格的なテストを行うにはテストの設計や、いろいろと考えることもありますが、まずはできるところからユニットテストを始めましょう。
アプリケーションの修正時などに発生する、低レベルな人的ミスはほとんど簡単なテストでカバーできます。

// Unit Test Code 
using System;
using NUnit.Framework;

namespace FaqBuilder.Test
{
	[TestFixture]
	public class QuestionTest
	{
		public QuestionTest()
		{
		}

		/*
			Test for load Faq data and getFaq() test for retrieving Faq data
		*/
		[Test]
		public void equalsTest()
		{
			Question qa = new Question();
			qa.Title = "Q";
			qa.Answer = "PRECODE";
			qa.Code  = "CODE";

			Assertion.AssertEquals(qa.Title, "Q");
			Assertion.AssertEquals(qa.Answer, "PRECODE");
			Assertion.AssertEquals(qa.Code, "CODE");

			Assertion.Assert(qa.Title != "q");
			Assertion.Assert(qa.Answer != "precode");
			Assertion.Assert(qa.Code != "code");
		}

	}
}


// Original Class
using System;

namespace FaqBuilder
{
	public class Question
	{
		private string title;
		private string answer;
		private string code;

		public Question()
		{
		}

		public string Title
		{
			get
			{
				return title;
			}

			set
			{
				this.title = value;
			}
		}

		public string Answer
		{
			get
			{
				return answer;
			}
			set
			{
				this.answer = value;
			}
		}

		public string Code
		{
			get
			{
				return code;
			}
			set
			{
				this.code = value;
			}
		}

		public void Print()
		{
			System.Console.WriteLine(Title);
			System.Console.WriteLine(Answer);
			System.Console.WriteLine(Code);
		}

	}
}


目次に戻る
Copyright(c) 2008 WoodenSoldier Software