Visual Studio 2017 RC のライブ ユニット テスト

本記事は、マイクロソフト本社の The Visual Studio Blog の記事を抄訳したものです。【元記事】 Live Unit Testing in Visual Studio 2017 RC 2016/11/18

 

Visual Studio 2017 に新機能のライブ ユニット テストが導入されました。この機能を使用すると、スピードが求められる開発作業の中でも、品質を確保しながら必要なテストをすべて網羅できるため、生産性が大幅にアップします。たとえば、なじみの薄いコード ベースのバグを修正する必要がある場合、この機能を使用すれば、修正によるコード変更がシステムの他の部分に影響しないかをすぐにチェックできます。また、コードを入力していくとその場でフィードバックを得られるので、より生産的にコーディングを進められるだけでなく、バグの修正やユニット テスト作成も楽しくなるに違いありません。

ライブ ユニット テストでは、コードの編集中にバックグラウンドで影響範囲のユニット テストが実行され、その結果やテスト範囲がリアルタイムでエディターにわかりやすく表示されます。コード変更の既存テストへの影響のほか、新たに追加したコードが 1 つ以上の既存のテスト範囲でカバーされているかどうかも即座にフィードバックされます。このため、バグの修正や機能の追加の際に、ユニット テストの作成が必要かどうかを把握できます。コード ベースのテストがすべて成功すればひと安心です。

ライブ ユニット テストは Visual Studio 2017 Enterprise エディションで使用可能で、.NET Framework をターゲットとした C# と VB のプロジェクトに対応しています。この機能では、VB と C# のコンパイラを使用してコンパイル時にコードを実装します。次に、そのコードでユニット テストを実行してデータを生成します。このデータは、テスト範囲に含まれるコードの行を分析するために使用されます。そして、このデータを使用して編集箇所のテストを実行し、すぐにエディター内に結果を表示します。コードを編集したりテストを追加または削除したりするたびにデータが更新され、影響を受けるテストが特定されます。

ライブ ユニット テストを開始する

ライブ ユニット テストを開始するには、上部のメニュー バーの [Test] コマンドから下図のように選択します。

Visual Studio のライブ ユニット テストでは、広く使われている MSTest、xUnit、NUnit の 3 つのユニット テスト フレームワークが主に使用されます。これらを使用する場合は、アダプターとフレームワークが以下の最小バージョンかそれよりも新しいバージョンであることを確認してください。ライブ ユニット テストを使用できない場合は、既存のプロジェクトからは古いアダプターとテスト フレームワークの参照を削除 (“Microsoft.VisualStudio.QualityTools.UnitTestFramework” への参照を必ず削除) し、新しいものを追加してください。これらのコードはすべて NuGet.org で入手できます。

  • xUnit: xunit.runner.visualstudio バージョン 2.2.0-beta3-build1187 および xunit 2.0 (またはそれ以降)
  • NUnit: NUnit3TestAdapter バージョン 3.5.1 および NUnit version 3.5.0 (またはそれ以降)
  • MSTest: MSTest.TestAdapter 1.1.4-preview および MSTest.TestFramework 1.0.5-preview (またはそれ以降)

ライブ ユニット テストのエクスペリエンス

ライブ ユニット テスト機能を有効化すると、テストでカバーされるコードの部分がすぐに表示され、テストの合否もエディター内で確認できます。ユニット テストの結果と範囲は、コード エディターで 1 行ごとに下記のように表示されます。

clip_image001実行可能なコードのうち少なくとも 1 つのテストでエラーが発生している行には赤色の “ × ” が表示されます。

clip_image002実行可能なコードのうちすべてのテストが成功した行には緑色の “✓” が表示されます。

clip_image003実行可能なコードのうちどのテスト範囲にも含まれない行には青色の横線が表示されます。

ライブ テスト ユニットでのコードの範囲とテスト結果がリアルタイムで提示されるため、手動で範囲を選択してテストを実行する手間がなくなります。また、コードの変更によりプログラムでエラーが発生すると緑色の “✓” が赤色の “ × ” に変わり、1 つ以上のテストが失敗したことがリアルタイムで通知されます。

また、“✓” や “ × ” にマウス カーソルを合わせると、その時点で該当する行をカバーしているテストの数が下図のように表示されます。

“✓” や “ × ” をクリックすると、該当する行で実行されているテストが下図のように表示されます。

ツール ヒントの中で失敗したテストにマウス カーソルを合わせると、下図のようにウィンドウが拡大されてエラーの詳細情報を確認できます。

さらに、失敗したテストをツール ヒントでクリックすると、そのテストに直接移動できます。バックグラウンドでライブ ユニット テストを実行中でも、該当するテストに移動して簡単にコードのデバッグ、編集、続行の工程を実施できます。デバッグ、編集、続行のサイクルの中でライブ ユニット テストを停止したり再開したりする必要はありません。

リファクタリング作業などでしばらくテストでエラーが発生することがわかっている場合などには、いつでもライブ ユニット テストを一時停止/完全停止することができます。その場合も、開始のときと同様に下図のように上部のメニュー バーの [Test] コマンドから必要な項目を選択するだけです。

一時停止すると、エディター内でテストの範囲が表示されなくなります。ライブ ユニット テストのメニューで [Continue] をクリックすると一時停止が解除され、テスト範囲が再び表示されるようになります。一時停止中は、一時停止前にライブ ユニット テストで収集されたデータはそのまま維持されます。[Continue] をクリックすると一時停止された後のすべての編集内容が確認され、グリフが適切に更新されます。

ライブ ユニット テストは必要に応じて完全に停止することもできます。完全停止した後にライブ ユニット テストを再開した場合、以前のデータはすべて消去されているため、停止する前に表示されていたグリフは表示されません。

まとめ

ライブ ユニット テストを使用すれば、開発者の生産性をアップさせ、あらゆるテストを網羅して、開発中のソフトウェアの品質を向上させることができます。.NET 開発者の皆様はぜひ Visual Studio 2017 でこの機能をお試しください。テスト主導で開発を行っているチームなら、日々のワークフローをゲーム感覚で楽しめるようになるはずです。最初のテストがすべて失敗したとしても、さまざまなテクニックを駆使して 1 つずつ困難をクリアしていくのは気持ちが良いものです。その感覚は練習の成果をコーチに認められたときの喜びにも似ています。

問題点がありましたら、インストーラーまたは Visual Studio IDE 本体の [Report a Problem (英語)] オプションからご報告をお願いします。また、新機能のご提案は UserVoice (英語) までお寄せください。

ライブ ユニット テストのビデオ (英語) でこの機能のデモをぜひご覧ください。

Joe Morris (Visual Studio 担当シニア プログラム マネージャー、@_jomorrisJoe)Joe Morris は 19 年前にマイクロソフトに入社し、この 3 年間はスタティック分析と開発者の生産性について集中的に取り組んでいます。
Manish Jayaswal (Visual Studio 担当主任エンジニアリング マネージャー)Manish Jayaswal はコンパイラ テクノロジ、デバッガー、プログラム言語、品質保証、エンジニアリング システムの各分野の深い専門知識を活かして、商用ソフトウェア開発の管理を長年担当してきました。