SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

C#で始めるテスト駆動開発入門

ユニバーサルWindowsアプリのユニットテスト(後編)

C#で始めるテスト駆動開発入門(9)

ダウンロード CsTdd09.zip (129.9 KB)

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では使えません)。

  1. パラメタライズドテスト
  2. Assert.ThrowsException(Windowsのみ)
  3. UITestMethod(Windowsのみ)

次のページ
6-1. DataTestMethod/DataRow(パラメタライズドテスト)

この記事は参考になりましたか?

C#で始めるテスト駆動開発入門連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

HONDA R&Dで自動車の設計をやっていた機械屋さんが、技術の進化スピードに魅かれてプログラマーに。以来30年ほど、より良いコードをどうやったら作れるか、模索の人生。わんくま同盟の勉強会(名古屋)で、よく喋ってたりする。2014/10~2019/6 Microsoft MVP (Windows Devel...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/8093 2014/10/08 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー