Visual Studio:テストエクスプローラーでNUnitのユニットテストを実行するには?.NET TIPS

Visual StudioのIDE内で、サードパーティ製のユニットテストフレームワーク「NUnit」によるユニットテストを実行する方法を解説する。

» 2015年04月08日 05時00分 公開
[山本康彦BluewaterSoft/Microsoft MVP for Windows Platform Development]
.NET TIPS
Insider.NET

 

「.NET TIPS」のインデックス

連載目次

対象:Visual Studio 2012以降
ただしExpressエディションを除く(Communityエディションは対応)


 Visual Studioには、MSTestというユニットテストのフレームワークが標準で搭載されている*1。しかし、標準ではない(例えばNUnitといった)ユニットテストフレームワークに慣れ親しんでいるので、そちらを使いたいこともあるだろう。そのような場合には、Visual Studioとは別にそのフレームワークのテストランナー(=ユニットテスト実行用のプログラム)も立ち上げて、二つのウィンドウ間を行ったりきたりすることになる。MSTestなら、Visual Studio組み込みのテストエクスプローラーを使って、一つのIDE上でコーディングとユニットテストが実行できるのだ。サードパーティ製のユニットテストフレームワークでも同様にできないだろうか? フレームワークによっては、それを可能にする「テストアダプター」を提供しているものもある。本稿では、無償のVisual Studio Community 2013を使い*2、テストエクスプローラーでNUnitのテストを実行する方法を紹介する。

*1 MSTestを使ったユニットテストの方法は、MSDN「単体テストの基本」をご覧いただきたい。なお、ここでいう「ユニット(=単体)」とはメソッドないしはクラスのことであって、「機能単体」や「画面単体」の意味ではない。

*2 Visual Studio 2012(Expressエディションを除く)でも、手順はほぼ同様である。


サードパーティ製のユニットテストフレームワークを使う

 本稿では、サードパーティ製のユニットテストフレームワークとしてNUnitを取り上げる*3。Visual Studio 2010までは、次の画像のようにVisual Studioとは別にNUnitのテストランナーを立ち上げて、二つのウィンドウを切り替えながら操作するしかなかった。Visual Studioでコードを書いてビルドし、NUnitのテストランナーに切り替えてテスト結果を見て、再びVisual Studioでコーディング……という手順を繰り返していたのである。

Visual StudioとNUnitテストランナー Visual StudioとNUnitテストランナー
画面左上がユニットテストを実行するNUnitのテストランナー、右下はVisual Studio Community 2013である。
二つのウィンドウを切り替えて作業するのは、面倒なだけでなく、小さい画面ではかなり窮屈だ(この画面は横1366×縦768ピクセルの環境をキャプチャーしたもの)。

*3 本稿ではNUnitの使い方は解説しない。少々古い記事だが「.NET Tools〜NUnit入門 Test Firstのススメ [NUnit 2.0対応版]」をご覧いただきたい。基本的な使い方は変わっていない。

なお、テストアダプターが提供されているユニットテストフレームワークはNUnitだけではない。Visual Studioの拡張機能をインストールするダイアログで「test adapter」を検索すれば、「CppTestRunner」/「GoogleTest Runner」/「Boost Unit Test Adapter」/「Jasmine Test Adapter」などのさまざまなテストアダプターが見つかる。


NUnitを導入するには?

 ここで、NUnitのインストール方法についても解説しておこう。インストールパッケージをダウンロードしてきてインストール作業を行ってもよいが、今はNuGetから簡単に導入できるのだ(次の画像)。プロジェクトごとに導入する必要があるものの、一度セットアップしたプロジェクトをソースコードリポジトリに格納してしまえば、開発用PCごとにNUnitをセットアップする必要がなくなる。

プロジェクトにNUnitを導入する(Visual Studio 2013) プロジェクトにNUnitを導入する(Visual Studio 2013)
これはVisual Studio Community 2013の画面である。
先に、NUnitのテストを記述するためのプロジェクトを作成しておく。プロジェクトの種類は、通常のクラスライブラリだ(「単体テスト プロジェクト」/「単体テスト ライブラリ」/「単体テスト アプリ」ではない。それらはMSTest専用である)。
ソリューションエクスプローラーでプロジェクトを選択し、その右クリックメニューから[NuGet パッケージの管理]を選ぶ((1))。
[NuGet パッケージの管理]ダイアログで、左側の[オンライン]を選び((2))、右上の検索ボックスに「NUnit」と入力して検索する((3))。見つかったNUnitを選ぶと[インストール]ボタンが表示されるので((4))、それをクリックしてインストールする。
右側の[ライセンス条項の表示]リンク((5))でライセンス条件を確認できるので、利用に先立って確認しておいてほしい。
なお、これでインストールされるのはNUnitのクラスライブラリのみである。テストランナーが必要な場合には、別途インストールすることになる(画像のリストで二番目に見えている「NUnit.Runners」)。

テストエクスプローラーでNUnitのユニットテストを実行するには?

 「NUnit Test Adapter」をNuGetから導入すればよい*4

 上でNUnitをプロジェクトに導入したときと同様な手順で、NUnit Test Adapterも導入できる(次の画像)。

プロジェクトにNUnit Test Adapterを導入する(Visual Studio 2013) プロジェクトにNUnit Test Adapterを導入する(Visual Studio 2013)
これはVisual Studio Community 2013の画面である。
先に示したNUnit本体を導入するときと手順は同じだ。
ソリューションエクスプローラーでプロジェクトを選択し、その右クリックメニューから[NuGet パッケージの管理]を選ぶ((1))。
[NuGet パッケージの管理]ダイアログで、左側の[オンライン]を選び((2))、右上の検索ボックスに「NUnit」と入力して検索する((3))。見つかった中から「NUnit Test Adapter for VS2012, VS2013 and VS2015」を選ぶと[インストール]ボタンが表示されるので((4))、それをクリックしてインストールする。
右側の[ライセンス条項の表示]リンク((5))でライセンス条件を確認できるので、利用に先立って確認しておいてほしい。

*4 NUnit Test AdapterはVSIXパッケージとしても公開されているので、Visual Studioの拡張機能としてもインストールできる。その場合は、プロジェクトごとにNuGetから導入する必要はなくなる。なお、拡張機能のインストールは、メニューバーの[ツール]−[拡張機能と更新プログラム]から行える。


 NUnit Test Adapterが導入できたら、MSTestと同様にテストエクスプローラーでユニットテストを実行できる。次の画像は、ユニットテストをいくつか書いて実行してみた結果だ。画像に見えるように、MSTestのユニットテストとNUnitのユニットテストを混在させ、それらを一度に実行することも可能なのである。

テストエクスプローラーでNUnitのユニットテストを実行したところ(Visual Studio 2013) テストエクスプローラーでNUnitのユニットテストを実行したところ(Visual Studio 2013)
これはVisual Studio Community 2013の画面である。画面左側のペインがテストエクスプローラーだ。
NUnit Test Adapterを導入した場合、ユニットテストの実行方法はMSTestと同じである。また、MSTestとNUnitのテストを混在させた上で、いっぺんに実行することもできる。この画像では、MSTestのユニットテストを一つと、NUnitのユニットテストを五つ実行している。NUnitでテストが失敗したときのメッセージも、テストエクスプローラーの下部に表示されている。
ちなみに中央のペインでは、「.NET TIPS:Visual Studio 2013:別ファイルにあるソースコードをその場で編集するには?」で紹介した[定義をここに表示]コマンド([Alt]+[F12]キー)を使って、ユニットテストコードとプロダクションコードを同時に表示している。
なお、Visual Studioの最上位版であるUltimateエディションではビルド成功時に自動的にユニットテストを実行させることも可能だが、テストアダプターを追加したユニットテストも対象になる。

カテゴリ:Visual Studio 処理対象:IDE 処理対象:テスト


「.NET TIPS」のインデックス

.NET TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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