SHOEISHA iD

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

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

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

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

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

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

ダウンロード CsTdd08.zip (125.1 KB)

3.同じユニットテストをWindowsとPhoneでいっぺんに実行する方法

 ここまでで、Windowsストアアプリ用のユニットテストプロジェクトからテストファーストでCalcクラスのAddメソッドを作りました。これは、Windows Phone用のユニットテストをしなくてもよいでしょうか?

 Addメソッドのようなシンプルなコードでは、その必要はないでしょう。しかし、現実のコードでは、Windowsストアアプリ用としてコンパイルした場合と、Windows Phone用としてコンパイルした場合で、テスト結果が異なることがあります。例えば、StorageFolderクラスです。Windowsストアアプリ用にはTryGetItemAsyncメソッドがありますが、Windows Phone用にはそのメソッドが存在しません。あるいは、両方に存在していても、実行結果が異なるものもあります。従って、ユニバーサルプロジェクトでWindowsストアアプリとWindows Phoneの両方から共通で使うコードには、両方のユニットテストが必要です。

 ユニットテストのプロジェクトには、共有プロジェクトがありません(注2)。すると、WindowsストアアプリとWindows Phoneストアアプリ用のそれぞれのユニットテストプロジェクトに、同じテストコードを書かなければならないのでしょうか?

注2 共有プロジェクトを自由に作成する機能について

 Visual Studio 2013では、共有プロジェクトを自由に作成することはできません。しかし、後編で紹介するツールを使えば可能です(ただし有償版のVisual Studio 2013のみ)。また、次期Visual Studioである"14"のCTP3には、共有プロジェクトを作成する機能が追加されました。まず間違いなく、次期製品版には反映されるでしょう。

プロジェクト間でユニットテストをリンクする

 プロジェクトに既存の項目をリンクとして追加することで、同じファイルを二重管理しなくて済むようになります。

 Windowsストアアプリ用のユニットテストプロジェクトにある「UnitTest1.cs」ファイルを、Windows Phoneストアアプリ用のユニットテストプロジェクトにリンクとして追加してみましょう。

 Windows Phoneストアアプリ用のユニットテストプロジェクトに存在する同名の「UnitTest1.cs」ファイル(先ほどAssert.Inconclusiveメソッドだけを追記したファイル)は、もう使わないので削除します。

 そうしたら、ソリューションエクスプローラーでWindows Phoneストアアプリ用のユニットテストプロジェクト(または、その配下のファイルのどれか)を選択しておき、メニューの[プロジェクト]-[既存の項目の追加]を選びます。表示された[既存項目の追加]ダイアログで、Windowsストアアプリ用のユニットテストプロジェクトにある「UnitTest1.cs」ファイルを選び、右下の[追加]ボタンの右側にある[▼]をクリックし、出てきたドロップダウンで[リンクとして追加]を選びます。

Windows Phone用のユニットテストプロジェクトに、Windowsストアアプリ用のユニットテストをリンクする
Windows Phone用のユニットテストプロジェクトに、Windowsストアアプリ用のユニットテストをリンクする

 これで、CalcクラスのAddメソッドをテストするコードが、Windows Phone用のユニットテストプロジェクトにも含まれました。「UnitTest1.cs」ファイルを開いてみると、左上のドロップダウンでコンテキスト(Windowsストアアプリ用として解釈するか、Windows Phone用として解釈するか)を切り替えられるようになっています(次の画像の赤枠内)。

プロジェクト間でリンクしたソースコードでは、ドロップダウンでコンテキストを切り替えられる
プロジェクト間でリンクしたソースコードでは、ドロップダウンでコンテキストを切り替えられる

 そしてテストエクスプローラーで[すべて実行]をクリックすれば、CalcクラスのAddメソッドのテストが、Windowsストアアプリの環境と、Windows Phoneの環境でいっぺんに実行されます。

テストエクスプローラーで、WindowsとPhoneのユニットテストをまとめていっぺんに実行できる
テストエクスプローラーで、WindowsとPhoneのユニットテストをまとめていっぺんに実行できる

 このように、プロジェクト間のリンクを使うことで、ユニットテストも「共有」できました。

 なお、ダウンロードできるサンプルソースには、この最後の状態のコードを収めてあります。

まとめ

  • 次のようなユニバーサルプロジェクトのアプリ/クラスライブラリーに対してユニットテストのプロジェクトを作成できる
    • Windowsストアアプリ
    • Windows Phone Windowsランタイムアプリ
    • PCL
    • WinMD
  • Windowsストアアプリ用のユニットテストも、Windows Phoneストアアプリ用のユニットテストも、Visual Studio 2013のテストエクスプローラーから実行できる
  • プロジェクト間のリンクを使うことで、ユニットテストも「共有」できる。その際には、コンテキストの切り替え機能も有効になる

 MSTestでもパラメタライズドテストが可能になりました! 次回、後編ではMSTestの新機能などを解説します。

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

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
C#で始めるテスト駆動開発入門連載記事一覧

もっと読む

この記事の著者

biac(ばいあっく)

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

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

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

この記事をシェア

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

おすすめ

イベント

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

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

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

メールバックナンバー