.NET Tools
NUnit入門 Test Firstのススメ

1.まず環境を準備する

(株)ピーデー
川俣 晶
2002/02/23
Page1 Page2 Page3 Page4 Page5

 今回は、ゲームのハイスコアを記録するクラスをNUnitを用いて開発する手順を例に、NUnitの使い方を解説したいと思う。機能としては、最高得点となる整数値と、そのスコアを出した人の名前となる文字列を保存する機能を持たせるものとする。得点の登録要求を受けたときには、要求された得点と現在の最高得点とを比較し、要求された数値が大きければ最高得点の情報を更新し、そうでなければ以前の最高得点の情報を維持する。NUnitは、個々のクラスなど、プログラムを構成する一部分をテストするものなので、プログラム全体のことを考える必要はない(プログラム全体が完成しなくても、テストを実施することができる)。ここでは、実際のゲームは作らず、ハイスコアの機能だけを作ってみよう。

 まずNUnitを入手しなければならない。NUnitのサイトより、NUnit installerの最新版をローカル・ディスクに保存して、このファイルをダブルクリックしてインストールを実行する。この際、インストール先フォルダを聞かれるが、任意のフォルダにインストールすればよい。これが完了すると、[スタート]メニューの[プログラム]−[NUnit]−[NUnitGUI]から、GUIバージョンの「NUnitランナー」を開くことができる。実際に正しくインストールされたことを確かめるために、試しにNUnitランナーを実行してみよう。ただしこれを実行するには、もちろん、.NET Frameworkのランタイム機能がインストール済みであることが必要である。これでNUnitを利用する準備は完了である。

 とはいえ、このままでは何もできない。テストを実行するプログラムは自分で書く必要がある。「では、さっそくテストの対象になるハイスコア・クラスを見て、どんなテスト・プログラムを書くべきか考えてみようか」と思った読者も多いと思う。実はまだハイスコア・クラスは書かれていない。それにもかかわらず、まずテスト・プログラムを書こうとしているわけである。それは順番が逆だと思った読者もいると思うが、そうではない。これが、「Test First」という方法なのである。

 ただし、ハイスコア・クラスがコーディングされていないとしても、そのクラスがどんな機能を持つべきかは、すでに検討済みであるとする。今回はテストを中心に解説するので、クラスの設計技法には足を踏み入れない。

 今回はVisual Studio .NET(以下VS .NET)を前提に手順を説明するが、コマンド・ラインでも同じことができる。またプログラム言語も今回はC#を前提にするが、ほかの.NET Framework上のプログラム言語でも同じことができる。

 では、さっそくテスト・プログラム作りの手順を説明しよう。まずVS .NETで、テスト対象のプロジェクトを作成しよう。もちろん新規に作るものだから、これから扱おうとするハイスコア・クラスはまだプロジェクトに含まれていない。プロジェクトの種類は、Windowsアプリケーションでも、クラス・ライブラリでも何でもよい。テストの際には、このプログラム内のメソッドを呼び出すが、プログラム自体は実行しないからである。ここでは、ゲームらしく「Windowsアプリケーション」を選んでおこう。

VS .NETの[新しいプロジェクト]ダイアログ
テストではプログラム内のメソッドを呼び出すが、プログラム自体は実行しない。そのためプロジェクトの種類は何でもよいが、ここではゲームのハイスコア・クラスということで「Windowsアプリケーション」を選択した。

 このままでは、テスト・メソッドからNUnitの機能が呼び出せないので、NUnitのライブラリをプロジェクトに追加しなければならない。ソリューション・エクスプローラのプロジェクト名を右クリックして、[参照の追加]を選ぶ。そして、NUnitをインストールしたフォルダ以下にあるbinフォルダの中から、“NUnitCore.dll”を選び[開く]ボタンをクリックする。

追加するライブラリの選択を行う[コンポーネントの選択]ダイアログ
ソリューション・エクスプローラ内のプロジェクト名を右クリックして[参照の追加]を実行し、表示される[参照の追加]ダイアログからこのダイアログを開く。“NUnitCore.dll”を追加することによって、テスト・メソッドからNUnitの機能を呼び出せるようになる。

 [選択されたコンポーネント]の下に、間違いなくNUnitCore.dllがあることを確認してから[OK]ボタンをクリックする。

NUnitCore.dllを追加した[参照の追加]ダイアログ
[選択されたコンポーネント]にNUnitCore.dllがあることを確認してから[OK]ボタンをクリックする。

 次は、テスト・メソッドを書き込むためのクラスを用意しよう。ソリューション・エクスプローラでプロジェクト名を右クリックして、表示されるショートカット・メニューの[追加]−[新しいクラスの追加]を実行する。そして、ハイスコアをテストする意味で、“HighScoreTest”というクラスを作成する。

新しいクラスの追加を行う[新しい項目の追加]ダイアログ
ソリューション・エクスプローラ内のプロジェクト名を右クリックし、[追加]−[新しいクラスの追加]を実行すると、このダイアログが表示される。

 こうして作成した“HighScoreTest”クラスは、すぐにテスト・メソッドを書き込んでも使えない。下準備として、NUnitで利用するために最低限必要な定番のパターンをソースに書き込む。以下は、それを書き込んだものだ。

 1: using System;
 2: using NUnit.Framework;
 3:
 4: #if !NOTEST
 5:
 6: namespace MyGame
 7: {
 8:   public class HighScoreTest : TestCase
 9:   {
10:     public HighScoreTest(String name) : base(name)
11:     {
12:     }
13:     protected override void SetUp()
14:     {
15:     }
16:     public static ITest Suite
17:     {
18:       get
19:       {
20:         return new TestSuite(typeof(HighScoreTest));
21:       }
22:     }
23:   }
24: }
25:
26: #endif
テストを実施するためのHiScoreTestクラスの最初のソース・コード
これは、ハイスコア・クラスをテストするためのメソッドを記述するためのクラスである。NUnitを利用するために最低限必要な定番のパターンのみを書き加えてある。

 このソース・コードを簡単に説明しておくと、2行目で指定されているネームスペースは、テスト・メソッドから呼び出すNUnitの基本機能が含まれたネームスペースである。8行目のように、テストに使用するクラスはTestCaseクラスを継承する必要がある。また、10〜12行目のコンストラクタも、引数をTestCaseクラスのコンストラクタに伝えるために必要である。従って処理すべき内容が何もなくても記述する。13〜15行目のメソッドは、テスト・メソッドの実行に先立って呼ばれるもので、テストの準備コードをここに書くことができる。16〜22行目のSuiteプロパティについては、こういうものだと思って、いつもこのとおりに書いていただきたい。ただし、typeofキーワード中のクラス名は、実際のクラス名に置き換える必要がある。

 4行目の#ifは、テストを含まないモジュールをビルドする場合の配慮である。シンボルNOTESTをプロジェクトのプロパティで追加してやると、テスト・コードはバイナリに含まれなくなる。シンボルDEBUGを使わないのは、リリース・ビルドをテストしたい場合もあり得るためだ。今回は、ターゲットのプログラムの一部としてテスト用のコードを含めているが、両者を別々のモジュールにするという選択もある。ただ、ターゲットがEXEファイルで、モジュールを分けた場合には、テストモジュールからEXEファイル中のメソッドを呼び出すのが少しだけ面倒になる。

 コードを書き終えたらビルドしてみよう。エラーがなければ、自分のテストを書き加える準備は完了である。

関連記事(Insider.NET内)
ソフト開発を成功させる1つの方法
 
関連リンク
NUnitの入手先

関連書籍
XPエクストリーム・プログラミング入門 ソフトウェア開発の究極の手法
(ISBN:4-89471-275-X)
XPエクストリーム・プログラミング導入編 XP実践の手引き
(ISBN:4-89471-491-4)
XPエクストリーム・プログラミング実践記 開発現場からのレポート
(ISBN:4-89471-469-8)
XPエクストリーム・プログラミング実行計画
(ISBN:4-89471-341-1)
 

 INDEX
  [.NET Tools]
  NUnit入門 Test Firstのススメ
   1.まず環境を準備する
     2.何はさておき、最初にテストを書こう
     3.NUnitを実行する
     4.唐突な仕様変更
   
インデックス・ページヘ  「.NET Tools」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間