Visual Studio 2013 による単体テスト 2014 Microsoft Corporation. All rights reserved. 1

Similar documents

Visual Studio 2013 によるコードマップを使用した 特定のコード内での依存関係の対応付け 2014 Microsoft Corporation. All rights reserved. 1

JUnit 概要 2015/4/16 版今泉俊幸 2015 bbreak Systems 1

目 次 Visual Studio 2013 による コード 複 製 検 出 を 使 用 した 重 複 コードの 検 出 ソリューションのコード クローン 分 析 の 実 行 と コードの 比 較 コントローラーとビューへのコード 追 加 重 複 コー

クラス図とシーケンス図の整合性確保 マニュアル

01_08 インストールガイド

インテル(R) Visual Fortran コンパイラ 10.0

Microsoft Visual Studio 2010 Professional Data Sheet

Team Foundation Server のインストールと最初の一歩 2014 Microsoft Corporation. All rights reserved. 1

Microsoft PowerPoint - 1_コンパイラ入門セミナー.ppt

TestDesign for Web

Visual Studio 2017 RC インストール & ファーストステップガイド 2016 年 11 月 16 日 (V1.0)

著作権 このドキュメントに記載されている情報は このドキュメントの発行時点におけるマクロソフトの見解を反映したものです マクロソフトは市場の変化に対応する必要があるため このドキュメントの内容に関する責任を問われないものとします また 発行日以降に発表される情報の正確性を保証できません このホワトペ

更新用証明書インポートツール 操作マニュアル 2011 年 10 月 31 日 セコムトラストシステムズ株式会社 Copyright 2011 SECOM Trust Systems CO.,LTD. All rights reserved. P-1

Prog2_12th

図 1:[ バージョン情報 ] ウィンドウ 図 1 からわかるとおり 本稿は Visual Studio Community 2017 Ver をもとに執筆していま す 3. 本書相当のテンプレートの作成 Ver.15.7では 本書で利 しているテンプレートはなくなってしまいましたが

スライド 1

FormPat 環境設定ガイド

C1Live

Acronis® Backup & Recovery ™ 10 Advanced Editions

改版履歴 版数 日付 内容 担当 V /03/27 初版発行 STS V /01/27 動作条件のオペレーティングシステムに Windows 7 STS を追加 また 動作条件のブラウザに Internet Explorer 8 を追加 V /0

平成 30 年度 プログラミング研修講座 岩手県立総合教育センター

Microsoft Word - XOOPS インストールマニュアルv12.doc

第 1 版

( 目次 ) 1. はじめに 開発環境の準備 仮想ディレクトリーの作成 ASP.NET のWeb アプリケーション開発環境準備 データベースの作成 データベースの追加 テーブルの作成

WebReportCafe

第 1 章 : はじめに RogueWave Visualization for C++ の Views5.7 に付属している Views Studio を使い 簡単な GUI アプリケーションの開発手順を紹介します この文書では Windows 8 x64 上で Visual Studio2010

改版履歴 版数 日付 内容 担当 V /0/27 初版発行 STS V..0 20/03/04 トラブルシューティング改訂 STS P-2

改版履歴 版数 改版日付 改版内容 /03/14 新規作成 2013/03まで製品サイトで公開していた WebSAM DeploymentManager Ver6.1 SQL Server 2012 製品版のデータベース構築手順書 ( 第 1 版 ) を本 書に統合しました 2

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

~ ユーザーインターフェイスの自動テスト ~

アドイン版 ********************************************* インストール手順書 *********************************************

D:\Documents\Visual Studio 2015\Projects\MyHomePage 用サンプル \ExcelAndWord\ExcelAndWord\MainForm.cs 1 /* */ Excel や Word とやりとりする ~9,20 仕様 Excel

アドイン版 ********************************************* インストール手順書 ********************************************* 目次 JAVIS Appli に必要な環境... 2 JAVIS Appli に必要

CodeRecorderでカバレッジ

Infragistics Ultimate  インストール手順書

この 文 章 に 含 まれる 情 報 は 公 表 の 日 付 の 時 点 での Microsoft Corporation の 考 え 方 を 表 しています 市 場 の 変 化 に 応 える 必 要 があるため Microsoft は 記 載 されている 内 容 を 約 束 しているわけではありま

EX AntiMalware v7 クイックセットアップガイド A7QG AHK-JP EX AntiMalware v7 クイックセットアップガイド 本製品の動作環境です OS 下記 OS の 32 ビット 64 ビット (x64) をサポートします Windows 10, 8.1,

Microsoft Word - ModelAnalys操作マニュアル_

Team Foundation Server 2018 を使用したバージョン管理 補足資料

Microsoft Word - VisualC++利用法2.doc

ArcGIS Pro 1.1 SDK for .NET インストール ガイド

intra-mart ワークフローデザイナ

Microsoft Word - CMSv3マニュアル-STB編(WindowsPC).docx

WebOTXマニュアル

改版履歴 版数 日付 内容 担当 V /5/26 初版発行 STS V /7/28 動作条件の変更 STS メール通知文の修正 V /2/7 Windows8 の追加 STS V /2/2 Windows8. の追加 STS V

Windows ログオンサービス インストールマニュアル 2018/12/21 1

ご注意 1) 本書の内容 およびプログラムの一部 または全部を当社に無断で転載 複製することは禁止されております 2) 本書 およびプログラムに関して将来予告なしに変更することがあります 3) プログラムの機能向上のため 本書の内容と実際の画面 操作が異なってしまう可能性があります この場合には 実

Microsoft Word - Custom1_ABC伝票印刷ドライバー_導入ガイド

Microsoft Word MT4-23_インストール公開編).doc

NetworkVantage 9

FlashAir ソフトウェア更新ツール Version 東芝メモリ株式会社 Copyright 2017 Toshiba Memory Corporation, All Rights Reserved. 対応 OS: 最新の対応 OS は Web サイトをご参照ください 概要本ソフ

C#の基本

第 2 版

DPC-0401

Microsoft Word - ESX_Setup_R15.docx

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows 日本語版 : インストール・ガイド

MISAO with WPF

ポップアップブロックの設定

<4D F736F F D20837D815B B838B837A838B835F E836782CC91E391D68EE892692E646F63>

証明書インポート用Webページ

アーカイブ機能インストールマニュアル

Microsoft Word - AW-SF100導入手順書(スタンドアローン版)_ doc

マクロの実行許可設定をする方法 Excel2010 で 2010 でマクロを有効にする方法について説明します 参考 URL:

発環境を準備しよう2 章開Eclipseをインストールしようそれでは Eclipseをセットアップしましょう Eclipseは Eclipse Foundationのサイトからダウンロードできます ダウンロードのページを開くと いく

アドイン版 ********************************************* インストール手順書 *********************************************

1. インストール方法マクロテンプレートをダブルクリックして開くと 図 1 や図 2 のような セキュリティ警告 が表示されることがありますが マクロを有効にする (E) ( 図 1) または コンテンツの有効化 ( 図 2) をクリックしてください 図 1 セキュリティ警告 (Windows Xp

目次 はじめに... 3 システムの必要条件... 3 サンプルアプリケーションの作成... 3 手順 手順 手順 手順 手順 手順 終わりに... 23

WorkWithPlus 8 へのアップグレードについて

PowerPoint Presentation

カルテダウンロード 操作マニュアル

ハンズオン事前準備資料 2017 株式会社 FIXER All rights reserved.

Microsoft PowerPoint - ソフトウェア更新手順書_DAN-W62_mac_ _1.ppt

1 検証概要 目的及びテスト方法 1.1 検証概要 Micro Focus Server Express 5.1 J の Enterprise Server が提供する J2EE Connector 機能は 多くの J2EE 準拠アプリケーションサーバーについて動作検証がなされています 本報告書は

試作ツールは MIT ライセンスによって提供いたします その他 内包された オープンソース ソフトウェアについてはそれぞれのライセンスに従ってご利用ください

EcRP インストール手順書 サーバ版 (Windows2003 – SQL2008) 《第1版》

ArcGIS Runtime SDK for WPF インストールガイド (v10.2.5)

BricRobo V1.5 インストールマニュアル

OTRS10 他社システムOTRS呼出利用手順書

秘密鍵ファイルを格納しているフォルダや秘密鍵ファイル自体に、該当ユーザアカウントのフルコントロールアクセス権が設定されているかどうかの確認方法および設定方法について

PRIMEQUEST 1000シリーズ WS2008 NTP設定手順書

Ver.0 目次. はじめに.... 証明書の発行 ( ダウンロード ) 手順... 付録 A. ルート証明書無しでの証明書の発行 ( ダウンロード ) 手順... 5 付録 B. ブラウザの設定... Copyright 04 SECOM Trust Systems CO.,LTD. All Ri

Visio-XPSP2_fl—fl….vsd

新規インストールガイド Microsoft Office Professional Plus 2016 本書は Download Station から Microsoft Office Professional Plus 2016( 以下 Office) をダウンロ ドし 新規インストールを行う手順

SCC(IPsec_win10)_リモート設定手順書.doc

Eclipse 操作方法 (Servlet/JSP 入門補助テキスト)

TaskClock_マニュアル.xlsx

3. 導入手順 通常通り ESTRA-Web を起動し ログインしてください 自動アップデートの処理が開始されますが ご使用の PC の状態により その他のアップデート作業が必要になる場合があります (1).Net Framework Ver 以前の物が導入されている PC の場合以前

FTP ウェブコンテンツダウンロード手順書 ver1.0 作成 :KDDI 株式会社 作成日 :2018 年 10 月 31 日

インテル® Parallel Studio XE 2019 Composer Edition for Fortran Windows : インストール・ガイド

1 はじめに 前準備 MICROSOFT 製品のプログラムを最新の状態にする NET FRAMEWORK 4.0 ( と日本語 LANGUAGE PACK) のインストール NET FRAMEWORK 4.0 のインストール... 4

ポップアップブロックの設定

1. インストール方法 マクロテンプレートをダブルクリックして開くと 図 1 のような セキュリティ警告 が表示されること があります 図 1 セキュリティの警告 (Windows 7 + Word 2010) テンプレートが開かれて 図 1 の セキュリティの警告 メッセージが表示されます コンテ

バックアップについての注意点 自動バックアップ設定後も 正常にデータが保管されているか定期的に必ず確認してください 定期的に必ず確認してください 設定後であっても様々な理由で突然バックアップが失敗していることもあるためです 複数の場所や媒体に定期的に保管することを強くおすすめします! 特に同じ建屋内

Microsoft PowerPoint - kougi2.ppt

Master'sONEセキュアモバイル定額通信サービス(MF120)設定手順書(Ver1_2).doc

プログラミング基礎I(再)

Welcome-Kit ~STM32L4-Nucleo~

Javaプログラムの実行手順

工程’S 9 ヘルプ Excelバーチャート

Transcription:

Visual Studio 2013 による単体テスト 2014 Microsoft Corporation. All rights reserved. 1

目次 Visual Studio 2013 による単体テスト... 1 1.1. テスト自動化の重要性... 4 1.2. 単体テストの基本的な手順... 7 1.3. カバレッジ分析を活用した単体テスト... 17 1.4. Fake を利用した高度な単体テスト... 22 2 2014 Microsoft Corporation. All rights reserved.

演習の目標 Team Foundation Server 2013 による単体テストの実践方法について学習しま す 演習の概要 テスト自動化の重要性 単体テストの基本的な手順 カバレッジ分析を活用した単体テスト Fake を利用した高度な単体テスト 演習の前提条件 この自習書を始める前に 以下の前提条件を満たす必要があります Visual Studio Premium 2013 with Update 4 もしくは Visual Studio Ultimate 2013 with Update 4 - 以下のページから [90 日間の無償評価版 ] を入手できます - http://www.visualstudio.com/downloads/download-visual-studiovs#downloadfamilies_1 Microsoft アカウントを作成済みであること 以上の前提条件は 以下のページを参考にしてください http://msdn.microsoft.com/ja-jp/windowsazure/ee943806 予想所要時間 60 分 2014 Microsoft Corporation. All rights reserved. 3

1. テスト自動化の重要性 ソフトウェアがビジネスや生活に多大な影響を与え 欠かすことができない存在となった今 ソフトウェアの品質はビジネスにとってもますます重要な存在になっています しかしその一方で 開発プロジェクトのコスト削減や開発期間の短縮が求められており 品質を確保するための作業に十分な工数をかけられない現状があります そのような現状において 近年注目を集めつつあるのが テストの自動化です テストの自動化には以下のようなメリットが挙げられます テストの効率化 仕様変更やバグ修正などの理由により 開発プロジェクトの途中でプログラムを何度も修正することがあります プログラムを修正した場合は その変更によって予想外の新たな問題が発生していないかを確認する必要があります ( これを [ 回帰テスト ][ レグレッションテスト ] と言います ) 手動で単体テストを実施すると その都度人の手によりテストを実施する必要 がありますが 自動化のためのテストコードを用意しておけば 2 回目以降は ツールを活用し ボタン一つでテストを実行することができます また Visual Studio においてチーム開発を支えるサーバー機能を提供している Team Foundation Server を利用すると ソースコードのチェックイン時にビルドと単体テストを実施し コードの変更により単体テストが失敗した場合にはいち早くその問題を検出することが可能です つまり 自動化により効率的にテストを行うことができるようになったこと で 頻繁なテストの実施が可能になり より素早く問題を発見し 対応するこ とが可能になるのです 確実性と一貫性 4 2014 Microsoft Corporation. All rights reserved.

手動 ( 人力 ) によるテストの実施では工数がかかるだけでなく 人によって実施の精度にばらつきが出てしまい また操作方法や入力においてミスがうまれることもあります テストをツールで自動化することによってテストに確実性と一貫性が出ます 保守性の向上 近年ソフトウェアを一からスクラッチビルドせず 既存のソフトウェアを保守したり 拡張する機会が多くなってきました 他の開発者が作成したプログラムを修正する場合 一部のコード修正であっても影響範囲が不明確なため広範囲なコードを確認する必要があります そのような場合にソフトウェアとともにテストコードを保持することで ソフトウェアを修正した際にテストを実施することで副作用が発生しないか都度確認しながら より確実に保守 拡張を進めることができます 近年ではソフトウェアを納品する際に実装コードだけでなくテストコードも合わせて納品してソフトウェアの保守 拡張に備える企業も増えています 品質の透明性 ソフトウェアの品質を確保するためには テストの実施だけでなくテストの実施データや 実施結果等の管理も重要となります 例えば Team Foundation Server を利用すると テストの実施結果をデータ化し 自動的に収集 共有することができます この結果 テストの進捗やソフトウェアの品質を把握することがより容易となります この自習書においては テストの自動化の第一歩として単体テストを取り上げます 単体テストに関しては Visual Studio のような有償ツールはもちろん オープンソースの NUnit のような無償のツールも普及しており また様々な技術書も存在しているため 最も身近で導入を行いやすい分野だといえます 2014 Microsoft Corporation. All rights reserved. 5

い ぜひこの自習書で 単体テストの基本的な概念と実施のための手順をご確認くださ Visual Studio 2013 試用版の入手方法 Visual Studio 2013 の試用版は無償で以下の Web サイトよりダウンロード入手 いただけます Visual Studio 2013 試用版 http://www.microsoft.com/visualstudio/jpn/downloads ( 本自習書の内容をお試しいただくには Premium もしくは Ultimate の環境 をご用意ください ) 6 2014 Microsoft Corporation. All rights reserved.

2. 単体テストの基本的な手順 一つめのハンズオンとして ここでは Visual Studio 2013 による単体テストの作成と 実施のための基本的な手順を学びます まず 事前の準備として 本ハンズオンではテスト対象のコードとして [MyClassLibrary] プロジェクト ( クラスライブラリのプロジェクト 名前空間もおなじく [MyClassLibrary] としています ) を作成し 以下の C# のクラスライブラリをテスト対象コードとして作成しています --- ここから --- public class Calculator { public int AddNumber(int x, int y) { } if (x < 0 y < 0) throw new ApplicationException("0 以上の数値を指定してく ださい "); return x + y; } --- ここまで --- この AddNumber メソッドは x と y という int 型の 2 つの引数を取り そ の加算結果を int 型で返却する処理です また x もしくは y が 0 未満の場 合は例外が発生するようにしています 上記コードに対して 単体テストを作成し 実施する手順を説明します 1. Visual Studio 2013 の [ ソリューションエクスプローラー ] ウィンドウで 該 当のコードを含むソリューションを右クリックし コンテキストメニューの [ 追加 新しいプロジェクト ] を選択します 2014 Microsoft Corporation. All rights reserved. 7

2. プロジェクトテンプレートが表示されるので 左ペインのツリービューで [Visual C# テスト ] ノードを選択します 表示されたテスト用のテンプレートから [ 単体テストプロジェクト ] を選択し またプロジェクト名として [MyUnitTest] と入力したら [OK] ボタンをクリックします 3. 単体テスト用のスケルトンコードが生成されます Visual Studio 2013 の単体 テスト機能では 単体テストを行うクラスには [TestClass] 属性が また実際 のテストを行うテストメソッドには [TestMethod] 属性が指定されています 8 2014 Microsoft Corporation. All rights reserved.

テスト用のメソッドや クラスを追加したい場合は 同様にこれらの属性を持 つメソッドやクラスを追加します さて 今回作成されたスケルトンコードにおいて テストのクラス名 メソッド名を適切な名称にリファクタリングしましょう リファクタリングのメニューは 例えば対象のテストメソッド名を右クリックしてコンテキストメニューの [ リファクター ] を選択することで確認することができます 今回は [ リファクター ] メニューから [ 名前の変更 ] オプションを選択します 4. 今回はクラス名を [CalculatorTest] とし メソッド名を [Add の正常系テスト ] と変更します 単体テストにおいては 通常テスト対象となるクラス ( 今回は [Calculator] クラス ) に対して テストクラスを一つ用意します その際に テストクラスの名称としては 対象となるクラスの名称に [Test] を付け加えたものにする といったルールを用意することで 単体テストのコードの保守性を向上させることが可能です ( 今回は [Calculator] + [Test] で [CalculatorTest] というクラス名にしています ) 2014 Microsoft Corporation. All rights reserved. 9

同じくメソッド名に関しては テストを実施する際にメソッド名だけでなに をテストするメソッドなのかがわかるようにしましょう 今回は 日本語を利 用しメソッド名を命名しています 5. [ ビルド ] メニューから [ ソリューションのリビルド ] を選択します 6. ビルドが正常に終了したら [ テスト ] メニューから [ ウィンドウ テストエ クスプローラー ] を選択します 7. [ テストエクスプローラー ] は Visual Studio で作成した単体テストを一覧し またそこからテストの実行や 実行結果の確認 あるいはテストの分類を行うための機能を提供するウィンドウです ソリューションのビルドが完了すると Visual Studio がソリューション中に含まれる単体テストの情報を自動的に収集し [ テストエクスプローラー ] ウィンドウに表示します 10 2014 Microsoft Corporation. All rights reserved.

この段階では 以下のように CalculatorTest クラスにおいて [Add の正常系 テスト ] のメソッドが表示されていることを確認します [ テストエクスプローラー ] ウインドウでは テストを分類するための機能 として [ クラス ] の他 テスト実施時の [ 継続時間 ] やテストの [ 結果 ] ある いは [ 特徴 ] や [ プロジェクト ] といった分類軸があります 8. MyUnitTest プロジェクトの参照設定において テスト対象となるプロジェクト ( 下記の画面においては MyClassLibrary プロジェクト ) への参照を追加します 手順としては [ ソリューションエクスプローラー ] ウィンドウで 単体テストの MyUnitTest プロジェクトの [ 参照設定 ] を右クリックしコンテキストメニューの [ 参照の追加 ] を選択します その後 表示されたウィンドウにて [ ソリューション ] の [ プロジェクト ] タブを選択し [MyClassLibrary] にチェックを入れ [OK] をクリックします 2014 Microsoft Corporation. All rights reserved. 11

9. CalculatorTest クラスを以下のように書き換えます --- ここから --- using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using MyClassLibrary; namespace MyUnitTest { [TestClass] public class CalcuratorTest { [TestMethod] } } public void Add の正常系テスト () { } var calc = new Calculator(); var returnval = calc.addnumber(1, 2); var exppectedval = 3; Assert.AreEqual(exppectedVal, returnval); --- ここまで --- 12 2014 Microsoft Corporation. All rights reserved.

このテストメソッドでは Calculator クラスのインスタンスを生成し AddNumber メソッドを第一引数に 1 を 第二引数に 2 を渡して呼び出し その結果を returnval 変数に格納しています また この呼び出しを行った際に期待される結果を expectedval 変数に格納し ています ( 1 と 2 の足し算なので 結果として 3 を期待しています ) 最後に Assert ([ アサート [ と読みます ) クラスの AreEqual メソッドにて 期 待される結果 (expectedval) と実際に帰ってきた値 (returnval) と比較してい ます Assert 文は テストの結果として [ こうであるべき ] [ こうでならなければならない ] という状態を判定するための条件文で この Assert 文に成功するということが テスト対象のコードの振る舞い ( 今回は Calculator クラスの AddNumber メソッドの振る舞い ) が単体テストに合格したこと ( 今回は [Add の正常系テスト ] に合格したこと ) を示します 10. [ ビルド ] メニューの [ ソリューションのリビルド ] を選択します 11. [ テストエクスプローラー ] ウィンドウで [Add の正常系テスト ] を右クリッ クし コンテキストメニューの [ 選択したテストの実行 ] を選択します 2014 Microsoft Corporation. All rights reserved. 13

12. Visual Studio によって [Add の正常系テスト ] メソッドが実行され テスト エクスプローラーにテストの結果が表示されます 成功した場合は テスト メソッドの前に 緑色のインジケーターが表示されます 13. 次にテストに失敗した場合の挙動を確認するために テスト対象となる AddNumber メソッドを以下のように書き換えます ( x + y ではなく x を返 すように変更 ) --- ここから --- public class Calculator { 14 2014 Microsoft Corporation. All rights reserved.

public int AddNumber(int x, int y) { if (x < 0 y < 0) throw new ApplicationException("0 以上の数値を指定して ください "); } } return x; //return x + y; --- ここまで --- 14. [ ビルド ] メニューの [ ソリューションのリビルド ] を選択し 続けて [ テスト エクスプローラー ] ウィンドウで [Add の正常系テスト ] を右クリックし コンテキストメニューの [ 選択したテストの実行 ] を選択します 15. [ テストエクスプローラー ] ウィンドウで 以下のようにテストが失敗したこ とが表示されます テストメソッドの前には 単体テストの失敗を表す赤色 のインジケーターが表示され また Assert に失敗した理由が表示されます 2014 Microsoft Corporation. All rights reserved. 15

16. 手順 [13] で変更した Calculator のコードを元に戻して下さい リビルドを実 施し 再度 [Add の正常系 ] の単体テストを実行し テストが成功するのを確 認しましょう 以上で 一つめのハンズオンは終了です 一つめのハンズオンでは Visual Studio 2013 を使用した単体テストの作成と 実施のための基本的な手順として 以下の内容を確認しました (1) ソリューションに対する単体テストプロジェクトの追加方法 (2) 単体テストを作成するための基本的な属性の理解 (TestClass 属性と TestMethod 属性 ) (3) テストエクスプローラーによる単体テストの表示 (4) Assert クラスによる期待される振る舞いの指定 (5) テストエクスプローラーによる単体テストの実行 (6) 対象コードが期待される振る舞いを行った際の動作 ( テストに成功した場合の動作 ) (7) 対象コードが期待される振る舞いを行わなかった際の動作 ( テストに失敗した場合の動作 ) 16 2014 Microsoft Corporation. All rights reserved.

3. カバレッジ分析を活用した単体テスト 二つめのハンズオンでは より質の高い単体テストを作成するために Visual Studio 2013 のコードカバレッジ機能を活用する方法を学びます 1. [ テストエクスプローラー ] ウィンドウで [Add の正常系テスト ] を実行する 際に [ 選択されたテストのコードカバレッジ分析 ] を選択し テストを実行 します 2. Visual Studio の [ コードカバレッジの結果 ] ウィンドウに 実施した単体テス トによって テスト対象コードの何 % がカバーされたかが数値で表示されま す 3. [ コードカバレッジの結果 ] ウィンドウで AddNumber メソッドを選択し 右 クリックしコンテキストメニューの [ ソースコードへ移動 ] を選択します 2014 Microsoft Corporation. All rights reserved. 17

ダブルクリックでも同様にソースコードへ移動します 4. AddNumber メソッドのソースコードが コードカバレッジの情報を付加した状態で表示されます 具体的には 実施したテストによりカバーされたコードが [ 青色 ] で カバーされなかったコードが [ 赤色 ] のマーカーが付いた状態で表示されます また 部分的にカバーされたコードは [ 黄色 ] のマーカーが付けられます コードカバレッジの結果表示における配色は Visual Studio トップメニュー の [ ツール オプション ] で [ 環境 ] の [ フォントおよび色 ] の設定項目で変 更することが可能です 18 2014 Microsoft Corporation. All rights reserved.

5. 単体テストによるカバレッジ率を上げるために if 文における条件評価が True となるテストパターンを追加しましょう 以下のテストメソッドをテストク ラス (CalculatorTest クラス ) に追加します --- ここから --- [TestMethod] [ExpectedException(typeof(ApplicationException))] public [TestMethod] [ExpectedException(typeof(ApplicationException))] public void Add の異常系テスト () { } var calc = new Calculator(); var returnval = calc.addnumber(-1, 2); --- ここまで --- 6. ソリューションをリビルドすると 以下のように [ テストエクスプローラー ] ウィンドウに [Add の異常系テスト ] が追加されますので [Add の正常系テ 2014 Microsoft Corporation. All rights reserved. 19

スト ] と [Add の異常系テスト ] 両方を選択した状態で [ 選択されたテストの コードカバレッジの分析 ] を実行します 今回のテストにおいては AddNumber の第一引数として [-1] を与えること により 例外が発生し 処理が中断してしまう という動作が期待されます 従って AddNumber に対する戻り値を期待し 戻り値に対して Assert 文を用意するのではなく テストメソッドの属性で [ExpectedException] を指定することで メソッド呼び出しにおいて [ 例外が起こるべき ] テストとして作成しています 7. [ コードカバレッジの結果 ] ウィンドウを確認すると AddNumber のカバレッ ジ率が 100% になったことを確認できます Visual Studio で提供しているコードのカバレッジ測定機能は コード行に対 するカバレッジの測定となります ( 二つのテスト条件によりカバー率が 100 % 20 2014 Microsoft Corporation. All rights reserved.

となります ) if 文における論理的なカバレッジを考慮する場合 今回の条件 式に対しては以下のように 4 つのパターンのテストデータを作成し テスト を行います ( x, y の値は参考としてのサンプルです ) --- ここから --- y がマイナス y が 0 以上 x がマイナス X=-1, y=-2 x=-1, y=2 x が 0 以上 x=1, y=-2 x=1, y=2 --- ここまで --- 単体テストにおいては [ 常に 100 % のカバレッジを必要とする ] わけではあり ません カバレッジ率は一つの指標であり テストにおける抜けや漏れを防ぐ ためのガイドとして使用しましょう 以上で 二つ目のハンズオンは終了です 二つ目のハンズオンでは 単体テストにおいて Visual Studio 2013 のコードカバレッジ機能を活用する方法として以下の内容を確認しました (1) コードカバレッジ分析の実行 (2) コードカバレッジ結果の確認 ( 数値による確認と コードにおける視覚的確認 ) (3) 例外を発生するロジックのテスト (ExpectedException 属性の利用 ) (4) 複数の単体テストによるカバレッジ分析の実行と結果の確認 2014 Microsoft Corporation. All rights reserved. 21

4. Fake を利用した高度な単体テスト 三つめのハンズオンでは Visual Studio 2013 の Fake Framework を利用した高度な単体テストを紹介します Fake Framework は Visual Studio 2013 の Premium および Ultimate エディションにて利用いただける機能です (*****************************Premium エディションでは Update 2 を適用いただくことで Fake Framework を利用いただけます ************************) 今回は 過去に作成したコードに対するメンテナンスの一環として 単体テストを作成する といったシナリオで単体テストの作成を行います (Fake Framework 自体は過去のコードに対するメンテナンスだけでなく テスト対象における外部コードへの依存性をなくし 純粋な単体テストを実施するために活用できる機能です ) 1. 最初に過去のコードのサンプルとして Visual Basic 2008 にて以下のクラスライブラリを作成します (Visual Basic 2008 の環境がない場合は Visual Studio 2013 で通常の Visual Basic のクラスライブラリとして.NET Framework 4.51 を使用して作成いただいても結構です ) --- ここから --- Public Class UtilityClass Public Function IsY2K() As Boolean If System.DateTime.Now = New DateTime(2000, 1, 1) Then Return True End If Return False End Function End Class --- ここまで --- 22 2014 Microsoft Corporation. All rights reserved.

2. Visual Basic 2008 の環境において 該当コードをコンパイルし DLL を作成し ます 3. Visual Studio 2013 を起動し トップメニューの [ ファイル 新規作成 プロジェクト ] を選択します 表示されたダイアログにおいて Visual C# のテンプレートから [ テスト ] を選択し [ 単体テストプロジェクト ] を指定し プロジェクトの名前を [MyUtilTest] として [OK] をクリックします 4. 単体テストプロジェクトが作成されるので ソリューションエクスプローラ ーの MyUtilTest プロジェクトの [ 参照設定 ] を右クリックし コンテキスト メニューの [ 参照の追加 ] を選択します 2014 Microsoft Corporation. All rights reserved. 23

5. [ 参照マネージャー ] ウィンドウが表示されるので 手順 2 で作成した DLL を 指定します 手順としては [ 参照マネージャー ] のブラウズメニューを選択後 [ 参照 ] ボタンをクリックし [ 参照するファイルの選択 ] ダイアログで 手順 2 で作成した DLL ( 例えば C: Users << ユーザー名 >> Documents Visual Studio 2008 Projects MyUtilityLibrary MyUtilityLibrary bin Debug といったフォルダ ) を指定します 指定後 [ 参照マネージャー ] にて 指定した DLL が表示されているので チェックボックスが入っていることを確認し [OK] ボタンをクリックします 24 2014 Microsoft Corporation. All rights reserved.

6. 以下のように 参照設定に [MyUtilLibrary] が追加されていることを確認しま す 7. テンプレートから作成されたテストのクラス名を [UtilityTestClass] に また テストメソッドの名前を [IsY2K の正常系テスト ] に変更します クラス名 メソッド名の変更は Visual Studio のリファクタリング機能を利 用します 一つめのハンズオンの手順 4 を参照してください 8. テストメソッドとして 以下のコードを実装します --- ここから --- using System; using Microsoft.VisualStudio.TestTools.UnitTesting; using MyUtilityLibrary; 2014 Microsoft Corporation. All rights reserved. 25

namespace MyUtilityTest { [TestClass] public class UtilityClassTest { [TestMethod] } } public void IsY2K の正常系テスト () { } var util = new UtilityClass(); var returnval = util.isy2k(); var expecterdval = false; Assert.AreEqual(expecterdVal, returnval); --- ここまで --- 9. [ ビルド ] メニューの [ ソリューションのリビルド ] を選択し [ テストエクスプローラー ] ウィンドウに作成したテストメソッド ([IsY2K の正常系テスト ]) が表示されたら 右クリックしコンテキストメニューの [ 選択したテストの実行 ] を選択し 成功することを確認します 26 2014 Microsoft Corporation. All rights reserved.

10. 手順 1 のコードを再度確認すると IsY2K メソッドは引数をとらないメソッドですが 外部の呼び出しとして System.DateTime.Now を呼び出しており この呼び出し結果により振る舞いが変わる (ture を返すか flase を返すか という振る舞いが変わる ) ことが認識できます 一方で IsY2K メソッドの単体テストとしては System.DateTime.Now が 2000 年 1 月 1 日を返した際に true を返す というシナリオも確認しなければ 十分な単体テストを実施している とは言い難い状況です このような場合に Visual Studio 2012 から提供されている Fake Framework を使用すると テストの実行時に System.DateTime.Now の振る舞いを変更することが可能です ここでは その第一の手順として System 名前空間に含まれるクラス群の振 る舞いを偽装 (Fake) するために fake アセンブリの追加を行います 具体的には ソリューションエクスプローラーにて MyUtilTest プロジェクト が参照している System アセンブリを右クリックし コンテキストメニュー の [Fakes アセンブリに追加 ] を選択します 2014 Microsoft Corporation. All rights reserved. 27

11. [ ソリューションエクスプローラー ] ウィンドウで 以下のように Fake のた めのライブラリが作成 追加されたことを確認します 12. MyUtilityClassTest クラスにおいて 次の二つのコードを追加します 一つめは Fake Framework を使用するための using の追加です --- ここから --- using Microsoft.VisualStudio.TestTools.UnitTesting; --- ここまで --- 28 2014 Microsoft Corporation. All rights reserved.

二つめが 新しいテストメソッドとして 2000 年 1 月 1 日を期待するテストコ ードです (expectedval として true を期待するコードになっています ) --- ここから --- [TestMethod] public void IsY2K の 2000 年 1 月 1 日の正常系テスト () { } var util = new UtilityClass(); var returnval = util.isy2k(); var expecterdval = true; Assert.AreEqual(expecterdVal, returnval); --- ここまで --- 13. 次に 先ほど追加した [IsY2K の 2000 年 1 月 1 日の正常系テスト ] メソッドを Fake Framework を使用して System.DateTime.Now の振る舞いを偽装 (Fake) するコードに書き換えます 具体的には System.DateTime.Now の振る舞いを変えたい箇所 ( 今回は util.isy2k() の呼び出し ) を ShimsContext によって囲むように書き換えます また ShimsContext において変更を行いたい振る舞いを追加します 2014 Microsoft Corporation. All rights reserved. 29

今回は System.DateTime.Now を偽装するためのメソッド System.Fakes.ShimDateTime.NowGet メソッドの振る舞いを 2000 年 1 月 1 日を指す DateTime インスタンスを返すように変更しています --- ここから --- [TestMethod] public void IsY2K の 2000 年 1 月 1 日の正常系テスト () { } var util = new UtilityClass(); var returnval = false; using (ShimsContext.Create()) { System.Fakes.ShimDateTime.NowGet = () => { return new DateTime(2000, 1, 1); }; returnval = util.isy2k(); } var expecterdval = true; Assert.AreEqual(expecterdVal, returnval); --- ここまで --- 14. ソリューションのリビルドを行い [ テストエクスプローラー ] ウィンドウに作成した [IsY2K の 2000 年 1 月 1 日の正常系テスト ] メソッドが表示されることを確認します また 先に作成した [IsY2K の正常系テスト ] と [IsY2K の 2000 年 1 月 1 日の正常系テスト ] を選択し [ 選択したテストの実行 ] を選択します 30 2014 Microsoft Corporation. All rights reserved.

15. [ テストエクスプローラー ] ウィンドウで 二つのテストの実行結果が [ 成功 ] になったことを確認します 以上で 三つめのハンズオンは終了です 三つめのハンズオンでは 単体テストにおいて Fake Framework を使用し より高度な単体テストを行うための方法として以下を確認しました (1) 過去に作成された DLL に対する単体テストの作成 (2) Fake Framework を利用した外部ライブラリの振る舞いの偽装 2014 Microsoft Corporation. All rights reserved. 31

( ア ) Fake アセンブリの追加 ( イ ) ShimsContext を使用した外部ライブラリ呼び出し偽装の実装アセンブリの追加 ( イ ) ShimsContext を使用した外部ライブラリ呼び出し偽装の実装 32 2014 Microsoft Corporation. All rights reserved.