Windowsストアアプリ用のユニットテストプロジェクトを追加する
ユニットテストのプロジェクトは「ユニバーサル」になっていません。Windowsストアアプリ用とWindows Phoneストアアプリ用と、別々にプロジェクトを用意します。
プロジェクトを追加する
まず、Windowsストアアプリ用のユニットテストプロジェクトから追加してみましょう。ここまでとは異なり、新しいプロジェクトを追加するダイアログの左側では[インストール済み]-[Visual C#]-[ストア アプリ]-[Windows アプリ]を選びます。そして、ダイアログの中央で[単体テスト ライブラリ]を指定します。
このユニットテストのプロジェクトには、次のプロジェクトへの参照設定をしておきます。
- ユニバーサルプロジェクトのWindowsストアアプリ用プロジェクト
- PCLのプロジェクト
- WinMDのプロジェクト
ユニットテストが動作することを確認する
追加したユニットテストのプロジェクトで簡単なユニットテストを書いて、ちゃんとユニットテストが動作するかどうか確かめておきましょう。参照設定をした3つのプロジェクトのそれぞれに、Calcクラスとその中にAddメソッドをテストファーストで作ってみます。
作成したユニットテストプロジェクトに自動生成されている「UnitTest1.cs」ファイルを開き、クラスの中身を次のように書き換えます(3つまとめて示しますが、実際には1つずつ作っていきます)。なお、MSTestでテストを書く基本的な方法は従来と変わっていませんので、連載第2回『Visual StudioのMSTestでTDDを行う方法』を参考にしてください。
CalcクラスのAddメソッドを作る
[TestClass]
public class UnitTest1
{
// PCL プロジェクトの Calc クラスの Add メソッド
[TestMethod]
public void Pcl_AddTest()
{
Assert.AreEqual<int>(3, CsTdd08Pcl.Calc.Add(1, 2));
}
// WinMD プロジェクトの Calc クラスの Add メソッド
[TestMethod]
public void WinMD_AddTest()
{
Assert.AreEqual<int>(3, CsTdd08WinMD.Calc.Add(1, 2));
}
// 共有プロジェクトの Calc クラスの Add メソッド
[TestMethod]
public void SharedProject_AddTest()
{
Assert.AreEqual<int>(3, CsTdd08App.Calc.Add(1, 2));
}
}
これはコンパイルできないので、次の画像のように赤い波線でエラーが報告されます。正しくプロジェクトの参照設定ができていれば、名前空間の記述はエラーになりません。その後ろのCalcクラスが存在しないというエラーになるはずです。
想定通りのエラーになったことが確認できたら、それぞれのプロジェクトにCalcクラスを作成します(次の画像)。Windowsストアアプリ用のCalcクラスは、ここでは共有プロジェクト(プロジェクト名の末尾が「.Shared」)に置きます。また、WinMDプロジェクトのCalcクラスは、sealedにしなければなりません。
これでビルドして、ユニットテストのコードに戻ってみると、こんどはAddメソッドがないというコンパイルエラーになっているはずです。
そこで、上の画像にあるように、Addメソッドのスケルトンを自動生成させます(Expressでも可能です)。なお、筆者の環境では、共有プロジェクト内にメソッドのスケルトンを自動生成できなかったので、PCLプロジェクトに生成されたコードをコピー&ペーストしました。
public static int Add(int p1, int p2)
{
throw new NotImplementedException();
}
これでビルドできるようになったので、ユニットテストを走らせてみましょう。左端からテストエクスプローラーを引き出し(左端にいない場合は、メニューの[テスト]-[ウィンドウ]-[テスト エクスプローラー])、[すべて実行]をクリックします。
テスト結果はRED(失敗)になるはずですね(次の画像)。
それぞれのAddメソッドを実装して、ユニットテストを実行し、テスト結果のGREEN(成功)を確認できたら、ユニットテストの動作確認は完了です。
Addメソッド
public static int Add(int m, int n)
{
return m + n;
}
Windows用の(次で説明するPhone用も)ユニットテストのプロジェクトをビルドすると、次のような警告が出ることがあります。
警告 1 Resources found for language(s) 'en-us' but no resources found for default language(s): 'ja'. Change the default language or qualify resources with the default language.(後略)
これは、MSTestのフレームワークが自動生成するリソースファイル(「Microsoft.VisualStudio.TestPlatform.Extensions. MSAppContainerAdapter.(中略).resw」という長いファイル名が付いています)がen-USしか用意されていないためです。この警告が出ていても問題ありませんが、気になるようなら(そして、テスト時の言語設定を変えても問題なければ)テストプロジェクトのマニフェストで既定の言語を「ja-JP」から「en-US」に変更してください。







