VS 2008単体テスト機能でテスト駆動開発/NUnitからの移行:特集:Visual Studio 2008単体テスト機能徹底活用(後編)(2/3 ページ)
VS 2008 Pro版に搭載されている単体テスト機能を使ってテスト・ファーストを実践。NUnitからのテスト移行についても考察。
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>
C#テスト・プロジェクトとVBテスト・プロジェクトのそれぞれでGUIDが決まっている。この要素を追加することで、クラス・ライブラリのプロジェクトがテスト・プロジェクトとして認識されるようになる。
以下の画面は、あるプロジェクト・ファイルをメモ帳で開き、上記の1行を追加した例だ。
<ProjectTypeGuids>要素を追加したら、ファイルを保存して、Visual Studioで起動すると、テスト・プロジェクトとして認識され、テスト・ツールバーやテスト・ビューに表示されるようになる。
次に、参照しているアセンブリを変更する必要がある。NUnitでは、nunit.frameworkを参照するが、Visual Studioでは、
Microsoft.VisualStudio.QualityTools.UnitTestFramework
への参照が必要になる。これについては、参照するアセンブリを追加するだけでよい。
Copyright© Digital Advantage Corp. All Rights Reserved.
