はじめに
ユニバーサルWindowsアプリを作るために新しく用意されたVisual Studioの「ユニバーサルプロジェクト」は、今までになかったソリューション構成です。そこで今回は、プロジェクトを作るところからユニットテストの方法を解説していきます。また、ユニットテストフレームワークにはVisual Studioに標準装備されているMSTestを使いますが、利用するライブラリーが従来のものとは異なっています。その新機能であるパラメタライズドテストなども紹介します。
前編:
- ユニバーサルWindowsアプリとユニバーサルプロジェクトについて
- ユニバーサルプロジェクトにユニットテストのプロジェクトを追加する方法
- 同じユニットテストをWindowsとPhoneでいっぺんに実行する方法
後編:
- ユニットテストを共有プロジェクトに置く方法(有償版限定)
- 非同期メソッドのユニットテスト
- Windowsランタイム用のMSTestライブラリーの新機能とその使い方
なお、UI操作の自動実行(自動化されたUIテスト)は扱いません。
この前編では、ユニットテストのプロジェクトの作り方と、ユニットテストの実行方法を説明します。
対象読者
- TDDに興味をお持ちのWindowsストアアプリ開発者/Windows Phoneアプリ開発者。
必要な環境
サンプルコードを試すには、Visual Studio 2013のUpdate 2以降が必要です(無償のExpressで可)。本稿執筆時点では、下記から入手できます。この記事では、Visual Studio Express 2013 with Update 3 for Windowsを使用しています。
OSにはWindows 8.1が必要です(2014年4月のアップデート、通称「Update 1」が必須)。さらに、Windows Phoneのユニットテストを実行するためには、64bit版Windows 8.1のPro版以上とSLAT対応のPCが必要になります。
なお、Expressエディションは複数存在していてまぎらわしいのですが、「for Windows」を使います。「for Windows Desktop」は、WPFとWindows Formsの開発用です。
1.ユニバーサルWindowsアプリとユニバーサルプロジェクト
まず初めに、いくつかの用語の定義をMSDN「ストア アプリとは」のページ(下の画像)から引用しておきます。
ストアアプリ: WindowsデバイスとWindows Phoneで動作する、デスクトップアプリ以外のアプリ
Windowsストアアプリ: Windowsストアアプリは、Windowsデバイス(PC、タブレット、ノートPCなど)上で動作し、Windowsストアで販売できます。
Windows Phoneストアアプリ: Windows Phoneストアアプリは、Windows Phone上で動作し、Windows Phoneストアで販売できます。
ユニバーサルWindowsアプリ: ユニバーサルWindowsアプリとは、WindowsストアとWindows Phoneストアの両方で入手できるアプリです。
上の定義によれば、WindowsストアとWindows Phoneストアの両方で入手できるようになってさえいればユニバーサルWindowsアプリです。従って、ユニバーサルWindowsアプリには、次に挙げるプラットフォーム向けのアプリが含まれます。
Windowsストアアプリ:
- Windows 8.0
- Windows 8.1
Windows Phoneストアアプリ:
- Windows Phone 7.x
- Windows Phone 8.x向けSilverlightアプリ
- Windows Phone 8.1向けWindowsランタイムアプリ
上記の中で任意のWindowsストアアプリと任意のWindows Phoneストアアプリを組み合わせて、ユニバーサルWindowsアプリとしてストアに登録できます。
そして、Windows 8.1用のWindowsストアアプリと、Windows Phone 8.1向けWindowsランタイムアプリのWindows Phoneストアアプリの組み合わせだけに絞って、両方のコードをできるだけ共通化しつつ楽に開発できるように用意されたのが、Visual Studio 2013 Update 2から提供されたC#用の「ユニバーサルプロジェクト」です。VB用は次期Visual Studio(通称VS14)からの提供になるといわれています。
今回のタイトルは「ユニバーサルWindowsアプリのユニットテスト」としていますが、正確にはその中の「ユニバーサルプロジェクトのユニットテスト」だけを扱います。ユニバーサルプロジェクトでユニットテストを作成/実行する方法を解説していきます。