特集
» 2008年12月19日 00時00分 公開

特集:Visual Studio 2008単体テスト機能徹底活用(後編):VS 2008単体テスト機能でテスト駆動開発/NUnitからの移行 (2/3)

[尾崎義尚,著]

NUnitとの互換性 − NUnitのプロジェクトをVS 2008に移行

 以前のVS 2005では、Professional Editionに単体テスト機能がなかったため(VS 2005 Team Systemにのみ搭載されていた)、代替手段としてフリーウェアのNUnitを使っていた開発者も多いと思う。

 VS 2008では、Professional Editionにも単体テストが搭載されるようになり、IDEに統合されているため、乗り換えを検討されている人もいるのではないだろうか。

 ここでは、NUnitからVisual Studioの単体テストへの移行方法を解説していく。なお本稿では、NUnit 2.4.8を使用して解説しているため、将来のバージョンでは変更される可能性がある。

■利用可能な属性/メソッドの比較

 まずは、各テスト・フレームワークで利用可能な属性やメソッドを比較してみよう。以降の表では、NUnitとVisual Studioで対応する機能を横並びにしている。

 次の表は属性についてまとめたものだ。なお、以降の表中の「」は、該当する機能が用意されていないことを示している。

NUnit Visual Studio
CategoryAttribute OwnerAttribute
CultureAttribute
DescriptionAttribute DescriptionAttribute
ExceptedExceptionAttribute ExceptedExceptionAttribute
ExplicitAttribute
IgnoreAttribute IgnoreAttribute
IncludeExcludeAttribute
PlatformAttribute HostTypeAttribute
PropertyAttribute
SetCultureAttribute
SetUpAttribute AssemblyInitializeAttribute
SetUpFixtureAttribute TestPropertyAttribute
SuiteAttribute
TearDownAttribute AssemblyCleanupAttribute
TestAttribute TestMethodAttribute
TextFixtureAttribute TestClassAttribute
TestFixtureSetUpAttribute ClassInitializeAttribute
TestFixtureTearDownAttribute ClassCleanupAttribute
CssIterationAttribute
CssProjectStructureAttribute
DataSourceAttribute
DeploymentItemAttribute
PriorityAttribute
ShadowingAttribute
TimeoutAttribute
WorkItemAttribute
属性(Attribute)の比較

 若干の差があるが、基本的な機能は同じであるといえるだろう。また、Visual Studioには、データ駆動テストに必要なDataSourceAttributeやDeploymentItemAttributeなどが提供されていることが分かる。

 次に、値の評価をするためのAssertクラスのメソッドを比較してみよう。

NUnit Visual Studio
AreEqual AreEqual
AreNotEqual AreNotEqual
AreNotSame AreNotSame
AreSame AreSame
Contains
Fail Fail
Greater
GreaterOrEqual
Ignore
IsAssignableFrom
IsEmpty
IsFalse IsFalse
IsInstanceOfType IsInstanceOfType
IsNaN
IsNotAssignableFrom
IsNotEmpty
IsNotInstanceOfType IsNotInstanceOfType
IsNotNull IsNotNull
IsNull IsNull
IsTrue IsTrue
Less
LessOrEqual
That
Inconclusive
Assertクラスのメソッドの比較

 こちらも基本的な機能は同じだが、NUnitにはGreaterやLessといった大小比較のメソッドなど、より多くのケースに対応できるメソッドが提供されていることが分かる。

 次にコレクションの値を評価するCollectionAssertクラスのメソッドを比較してみる。

NUnit Visual Studio
AllItemsAreInstanceOf AllItemAreInstanceOf
AllItemsAreNotNull AllItemsAreNotNull
AllItemsAreUnique AllItemsAreUnique
AreEqual AreEqual
AreEquivalent AreEquivalent
AreNotEqual AreNotEqual
AreNotEquivalent AreNotEquivalent
Contains Contains
DoesNotContain DoesNotContain
IsEmpty
IsNotEmpty
IsNotSubsetOf IsNotSubsetOf
IsSubsetOf IsSubsetOf
CollectionAssertクラス

 CollectionAssertで提供されている機能は、ほぼ同じで、異なっているのはIsEmptyとIsNotEmptyのみだ。

 最後に文字列の評価を行うStringAssertクラスの比較だ。

NUnit Visual Studio
AreEqualIgnoringCase
Contains Contains
EndsWith EndsWith
IsMatch Matches
StartsWith StartsWith
DoesNotMatch
StringAssertクラス

 NUnitには、大文字/小文字の区別をしないAreEqualIgnoringCaseメソッドが提供されている。

 ここでは両者で提供されている3つの基本的なクラスについて見たが、このほかにもNUnitではさまざまなクラスが提供されている。例えばAssertクラス関連でいえば、NUnitにはファイルの内容を比較するFileAssertクラスが提供されている。またVisual Studioでは、Mockオブジェクト(実際のオブジェクトの代用として利用できるオブジェクト)がサポートされていないし、評価メソッドをラップするAssertionHelperも提供されていない。NUnitでこれらの機能を使っている場合には、独自にそれを実装する必要がある(NUnitでConstraints名前空間のオブジェクトを使っている場合も同様である)。

 このように、長年にわたり多くのユーザーに利用されているNUnitでは、さまざまなテストに対応できるようにきめ細かいクラスやメソッドが用意されているものの、一般的に使われる属性や比較メソッドには大きな差がないため、本稿で挙げたような機能を使っている場合は、NUnitからVS 2008へのテスト・コードの移行はそれほど難しくないはずだ。ただし、初期化(Setup)や事後処理(TearDown)などを使っている場合には注意が必要だ。これについては後述する。

■テスト・プロジェクトの移行

 NUnitからの移行で最初に必要なのは、テスト・プロジェクトの変換である。

 NUnitのテスト・プロジェクトは、クラス・ライブラリのプロジェクトとして作成されている。Visual Studioの単体テストも同じようにクラス・ライブラリではあるのだが、プロジェクト・ファイルでは、それがテスト・プロジェクトであることを表すタグが記述されている。テスト・プロジェクトをメモ帳などで開いて、<Project> - <PropertyGroup>の下に、以下の情報を追加する。

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

<ProjectTypeGuids>{3AC096D0-A1C2-E12C-1390-A8335801FDAB};{F184B08F-C81C-45F6-A57F-5ABD9991F28F}</ProjectTypeGuids>

テスト・プロジェクトに追加する<ProjectTypeGuids>要素(上:C#、下:VB)
C#テスト・プロジェクトとVBテスト・プロジェクトのそれぞれでGUIDが決まっている。この要素を追加することで、クラス・ライブラリのプロジェクトがテスト・プロジェクトとして認識されるようになる。

 以下の画面は、あるプロジェクト・ファイルをメモ帳で開き、上記の1行を追加した例だ。

<ProjectTypeGuids>要素を追加したプロジェクト・ファイル

 <ProjectTypeGuids>要素を追加したら、ファイルを保存して、Visual Studioで起動すると、テスト・プロジェクトとして認識され、テスト・ツールバーやテスト・ビューに表示されるようになる。

 次に、参照しているアセンブリを変更する必要がある。NUnitでは、nunit.frameworkを参照するが、Visual Studioでは、

Microsoft.VisualStudio.QualityTools.UnitTestFramework

への参照が必要になる。これについては、参照するアセンブリを追加するだけでよい。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。