[目次]UnitTestとはたとえば、「あるクラスのあるメソッドが正しく実装できているか」をソフトウエア自体でテストしてしまおう、それがUnitTestです。テストコード自体は各自が必要に応じて作成する必要があります。そのテストコードを実行して「成功」とか「失敗」とか表示するような共通部分を毎回作る必要はありません(誰かが一度作ってくれれば)。いった「共通部分」のことをテスティングフレームワークなどと呼びます。いまでは、いろいろなテスティングフレームワークがオープンソースで公開されています。Java用のJUnit、C++用のCppUnit、Ruby用のRubyUnitなどなどです。NUnitはC#で実装されたオープンソースの.NET用テスティングフレームワークです。NUnitのセットアップNUnit.orgからダウンロードしてセットアップするだけです。利用ガイド」というのがあります。書かれているので、ぜひ、一度読んでみてください。1.11を前提に書かれているので、その点だけは注意してください。NUnitはVer1.xとVer2.0では結構変わっています。NUnit2.0でも1.xのコードでも問題なく使えるらしいんですが、せっかくなので2.0での使い方を書いておきます。以下のようなクラスがあったとします。このクラスのDivisionメソッドのテストコードを書いてみましょう。VS.NET)でテスト用のプロジェクトを作成する手順は以下のような感じになります。VS.NETでテスト用のプロジェクトを新規作成。プロジェクトの種類は、C#の「クラスライブラリ」でいいでしょう。(テストされるコードのEXEなりDLLなりが参照さえできれば、プロジェクト自体はどこにあっても構わないはずです)。参照を追加(NUnit1.xではNUnitCore.dllでしたが、名前が変わったようです)。(同じソリューションのときは「プロジェクト」タブで追加しておくのが簡単です)。これだけの準備をしておけばテストコードが書けます。}}テストコードこんな感じです。このようにNUnit2.0では、テストクラスはTestCaseクラスを継承する必要はなくなった。そのかわりに単に[TestFixture]属性をクラスにつける。テストメソッドもTestで始める必要はなくなった。そのかわりに単に[Test]属性をメソッドにつける。AssertEqualsなどの評価メソッドはAssertionクラスのstaticメソッドになった(もともとそうかもしれませんが)。いったところがNUnit1.xとの大きな違いです。あと、テスト用のクラスはXxxTestCaseのように「名前」+「TestCase」というクラス名にするのが一般的でした。NUnit2.0ではサンプルとかドキュメントとかが一貫してXxxTestという名前になっています。NUnit2.0にあわせましたが、どっちがいいのかはよくわかりません。これをコンパイルしてNunit-Gui.exeで読み込んで「Run」すればテストが実行されます。上記のテストは必ず成功するはずなのでみごとに緑色になるはずです。毎回、わざわざNunit-Gui.exeを起動するのが面倒という場合は、VS.NETで、ソリューションの「スタートアッププロジェクトの設定」でテスト用プロジェクトをスタートアッププロジェクトに指定する。テスト用のプロジェクトのプロパティを開く。「構成プロパティ」−「デバッグ」を選択する。「デバッグモード」を「プログラム」にする。「スタートアプリケーション」にNunit-Gui.exeを指定。「コマンドライン引数」に/assembly:Test.dllのような形でテスト用コードのDLLを指定。(起動するだけで自動的にテストを実行してくれるわけではありません)。該当するテストメソッドにブレークポイントを仕掛けて、トレースで原因を調査することができます。自動化したいときはNunit-Console.exeを使えばいいでしょう。こちらを使うとテスト結果をXMLファイルとして保存することができます。ようなツールを使えば、テスト結果をHTML化することができます。うまく使えば、テスト結果の履歴をHTMLで残すようなこともできるわけです。こんなとこで他にも[SetUp]属性、[ExpectedException]属性や[Suite]属性とTestSuiteクラスといったものが用意されています。Webを検索するなりしてみてください。それに、NUnitは他のテスティングフレームワーク(xUnit)と基本的に同じつくりになっています。(NUnit2.0は属性ベースってことで、ちょっと他のとは毛色が違うところはありますが)。したテストコードを書くかのほうが難しかったりします。テストコード自体に不備があってはテストの意味がなくなっちゃいますから。臣一2002/12/02。