「Any Developer, Any App, Any Platform」 ―― Visual Studio 2017が目指す世界とは?特集:Visual Studio 2017の全貌を探る(3/5 ページ)

» 2017年03月24日 05時00分 公開
[山本康彦BluewaterSoft/Microsoft MVP for Windows Development]

ユニットテスト:MSTest V2とライブユニットテスト

 ユニットテストフレームワークはMSTest V2に進化し、テスト作成に使うAPIも.NETとUWPで共通になった。パラメタライズドテストが.NETでも簡単に書けるようになり(次の画像の赤枠内)、ますます便利になっている。

 加えて、Enterpriseエディションにはライブユニットテストが搭載された。これは、指定したユニットテストを自動実行するものだ。コードがコンパイル可能な状態になるたびに、バックグラウンドで自動的にテストが実行される(次の画像)。リファクタリングするときにありがたい機能だ。

ライブユニットテストを開始する(赤枠内はパラメタライズドテストの定義)
ライブユニットテストを開始する(赤枠内はパラメタライズドテストの定義)
全てのテストが実行され、テストエクスプローラーに結果が表示される(緑色バー=成功)
全てのテストが実行され、テストエクスプローラーに結果が表示される(緑色バー=成功)
テストケースを追加すると自動的に全てのテストが実行され、その結果が表示される(赤=失敗)
テストケースを追加すると自動的に全てのテストが実行され、その結果が表示される(赤=失敗)
製品コードを修正すると、また自動的に全てのテストが実行され結果が表示される
製品コードを修正すると、また自動的に全てのテストが実行され結果が表示される

ライブユニットテストの様子(Enterpriseエディションのみ)
1枚目: ライブユニットテストを開始する(赤丸内)。なお、赤枠の部分は、DataTestMethod属性とDataRow属性を使ったパラメタライズドテストの指定である(「NUnitのTestCase属性に相当」といった方が分かりやすいだろうか)。1枚目の画像では、2つのテストケースを定義している。また、テストメソッドごとにライブユニットテストから除外するかどうかを指定できる。なお、.NET Coreのテストはサポートされていない。
2枚目: バックグラウンドでユニットテストが実行されて、左側のテストエクスプローラーの表示が変わる。緑色はテスト合格だ。テストエクスプローラーには1件と表示されているが、その[FizzBuzzTest]の部分(赤丸内)をクリックするとそこに含まれている全てのテストケースのテスト結果が表示される(3枚目/4枚目の画像を参照)。また、ライブユニットテストが有効になっていると、コードの行頭にはスペースが開けられ、緑のチェックマーク(=その行はテスト時に実行され、全て成功した)、または赤の×印(=その行はテスト時に実行され、少なくとも1つのテストケースが失敗した)が表示される。
3枚目: 3つ目のテストケースを追加した(赤丸内)。ちょっとすると(ファイルを保存していなくても)、自動的にテストが実行される。追加したテストケースに対して製品コードが未対応であったため、テストエクスプローラーの表示は赤色に変わってテストの失敗を知らせている。
4枚目: 製品コードを修正した(赤丸内)。ここでは、製品コードを[定義をここに表示(Alt+F12)]機能を使ってテストコード上に表示し、編集している。またちょっとすると自動的にテストが実行され、テストエクスプローラーの表示が緑色に戻った。
なお、ライブユニットテストを有効にしているときでも、手動でテストを実行できる。ここで示したようなテストファーストの手順で進めるときは、編集後に保存した後のタイムラグを待つか、手動でテスト実行操作をするか、微妙なところがある。テストの変更を伴わないリファクタリングのときは、どんどん書き換えていけるのでとても助かる。


.NET Standard Library

 .NET Standard Libraryは、これからポータブルクラスライブラリ(PCL)を置き換えていくものだ。今までならPCLのプロジェクトを作っていた場面で、これからは.NET Standardのプロジェクトの作成を検討してほしい。

 VS 2017の新しくプロジェクトを作るダイアログで、.NET Standardを対象とするクラスライブラリがサポートされた(次の画像)。

.NET Standardのクラスライブラリを作る .NET Standardのクラスライブラリを作る
 この形式のクラスライブラリはVS 2015でも作成できなくはなかったが、ちょっと面倒だった。VS 2015のときは、.NET Coreを導入した上でPCLのプロジェクトを作り、それからターゲットを.NET Standardに設定し直す必要があったのだ。
VS 2017では、ご覧のように.NET Standard用のクラスライブラリを作るためのプロジェクトテンプレートが用意された。

 .NET Standardとは、簡単にいってしまえば、.NETを実装するさまざまなフレームワークに共通する基本クラスライブラリを定義することで、これまでに種類が多くなりすぎたPCL(のプロファイル)を整理しようというものだ。名前が似ている.NET Coreとの関係は、ブログ記事「Introducing .NET Standard」の2枚の図を見てもらうと分かりやすい(次の画像)。

さまざまな基本クラスライブラリ
乱立した基本クラスライブラリを、.NET Standard Libraryとして統合する .NET Standard Libraryの位置付け
Introducing .NET Standard」より。
上: .NET Frameworkの基本クラスライブラリといえば、初めはBase Class Library(BCL)だけだった(左)。そこに、.NET Core(UWPアプリやASP.NET Coreアプリ)用のCore Libraryが加わり(中)、またXamarin用のMono Class Libraryも扱うようになった(右)。
下: 乱立した基本クラスライブラリを、.NET Standard Libraryとして統合する。
.NET Standard用にクラスライブラリを作れば、この図にある全てのアプリから利用できるのである。ただし、VS 2017では1.0から1.6までのレベルの.NET Standardを作れるが、例えば1.3以上にするとストアアプリ(Windows 8.xとWindows Phone 8.x)からは利用できなくなる(「.NET Standard Library」に掲載されている表を参照)。

 ここまではVS 2017やプログラミング言語における新機能について主に見てきた。次ページ以降では、どんなプラットフォームに向けてアプリ開発を行えるのかを見ていこう。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

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

メールマガジン登録

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