5.非同期メソッドのユニットテスト
Taskクラスを返す「非同期メソッド」をテストする方法は、以前の記事『Visual Studio 11 betaの単体テスト機能を使ってみよう! 』で説明しています。ポイントは、テストメソッドのシグネチャに「async Task」を付けることです。
ここでは説明のために、非同期で数値を加算するAddAsyncメソッドを、共有プロジェクトのCalcクラス(前編参照)に実装してみましょう。
先ほどテストの共有プロジェクトに移動した「UnitTest1.cs」ファイルを開き、次のようなテストメソッドを追加します。
AddAsyncメソッドのテスト
[TestMethod]
public async System.Threading.Tasks.Task SharedProject_AddAsyncTest()
{
Assert.AreEqual<int>(3, await CsTdd08App.Calc.AddAsync(1, 2));
}
まだAddAsyncメソッドが存在しないので、これはビルドエラーになります。そこで、Visual Studioにメソッドスタブを自動生成させてやります(次のコード)。
AddAsyncメソッド
public static System.Threading.Tasks.Task<int> AddAsync(int p1, int p2)
{
throw new NotImplementedException();
}
これでビルドできるようになったので、テストを実行してRED(失敗)になることを確認します。そうしたら、AddAsyncメソッドを次のように修正し、テストを実行してGREEN(成功)になることを確認して完了です。
AddAsyncメソッド
public static System.Threading.Tasks.Task<int> AddAsync(int m, int n)
{
return System.Threading.Tasks.Task.Run(() => m + n);
}
なお、テストメソッドのシグネチャを「async Task」ではなく、間違えて「async void」にした場合、VS2013はテストとして認識しませんので、ご注意ください。このあたりも、必ず先にRED(失敗)を確認するようにしていれば、ミスに気づけます。
6.Windowsランタイム用のMSTestライブラリーの新機能とその使い方
ストアアプリのユニットテストと従来のデスクトップアプリのそれとでは、MSTestが使用するライブラリーが異なっています。
- 従来:Microsoft.VisualStudio.TestTools.UnitTesting名前空間など
- ストアアプリ:Microsoft.VisualStudio.TestPlatform.UnitTestFramework名前空間など
ユニバーサルプロジェクトでのユニットテストには、後者を使います。前者は利用できません。なお、逆に、従来のデスクトップアプリ用のユニットテストでは、前者だけが利用でき、以降で紹介するような後者の便利な機能は使えません。
ところで、ストアアプリ用のMicrosoft.VisualStudio.TestPlatform.UnitTestFramework名前空間などのドキュメントが、いまだに公開されていません。そのため、Microsoft.VisualStudio.TestTools.UnitTesting名前空間のドキュメントをベースにして使うことになります。
- 削られたもの:ビルドエラーになるので分かる
- 同じ名前のもの:使い方もたいてい同じ
- 増えたもの:以降の解説を読む/Webを検索する/いろいろ試してみる
増えた機能から主なものを3つ、以降で紹介していきます(2.と3.は、まだPhoneでは使えません)。
- パラメタライズドテスト
- Assert.ThrowsException(Windowsのみ)
- UITestMethod(Windowsのみ)
