visual studio 2005 を使ったテスト

50
わわわわわわ わわわわわ #1 Visual Studio 2005 わわわわわわわ

Upload: garth-burris

Post on 02-Jan-2016

35 views

Category:

Documents


4 download

DESCRIPTION

Visual Studio 2005 を使ったテスト. テスト機能とは?. 単調な単体テストを繰り返し行ってくれるものです。 XP(eXtreme Programming) の重要な要素のひとつです。 有名な xUnit シリーズなどがあります。. どのエディションで使えるのですか?. Team System. Team Edition for Database Professional. Team Edition for Software Architects. Team Edition for Software Developers. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

Visual Studio 2005 を使ったテスト

Page 2: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テスト機能とは?

• 単調な単体テストを繰り返し行ってくれるものです。

• XP(eXtreme Programming) の重要な要素のひとつです。

• 有名な xUnit シリーズなどがあります。

Page 3: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

どのエディションで使えるのですか?

Team System

Team Edition forSoftware

Developers

Team Edition forSoftwareTesters

Team Edition forSoftwareArchitects

ProfessionalVSTO

Standard

ExpressC#

ExpressVB

ExpressC++

ExpressJ#

ExpressWeb

Team Edition forDatabase

Professional

Page 4: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

全エディションにキャンペーン

Page 5: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

開発手法として

ウォーターフォール

プロトタイピングモデルや XP

Page 6: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

XP とは?

• リリースは小規模に・複数回(プロトタイピングモデルはウォークスルーの実現だけを行えば破棄してる場合が多い)

• ペアプログラミング• ユーザと物理的に近距離で行う• テストコードを書いて常に流す ( それをテ

ストのメインにする )

XPXP をいきなり全社的にをいきなり全社的に

行うのは非常にリスキー行うのは非常にリスキー

Page 7: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

ウォーターフォールとは

要件定義

外部設計

内部設計

コーディング

単体テスト

結合テスト

システムテスト

Page 8: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テスト対象機能 条件 確認項目 確認日 確認者ユーザテーブルにレコードが登録されていることユーザIDが新規に振られていることユーザ名が指定のものであることメールアドレスが指定のものであることパスワードが指定のものであること例外が発生することユーザテーブルにレコードが登録されていないこと例外が発生することユーザテーブルにレコードが登録されていないこと例外が発生することユーザテーブルにレコードが登録されていないこと例外が発生することユーザテーブルにレコードが登録されていないこと例外が発生することユーザテーブルにレコードが登録されていないこと

ユーザ登録

正常に登録できること

ユーザ名がNullの場合

ユーザ名がすでに存在している場合

メールアドレスがすでに存在している場合

メールアドレスがNullの場合

パスワードがNullの場合

テスト項目書つくっていませんか?

Page 9: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

Demo 1

Page 10: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

どのような仕掛けで動いているの?

• TestClass 属性の付いているクラスの・・・

[TestClass()]

public class 四則演算 Test

• TestMethod 属性の付いているメソッドが対象です。

[TestMethod()]

public void 足し算 Test()

Page 11: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

どのフォルダで動いているの?

• ソリューションフォルダの TestResultsというフォルダ配下に、テストのユーザ・マシン・日時 \Out というフォルダを作成し、そこで動きます。

Page 12: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストの実行

ソリューションフォルダ対象プロジェクト

TestResults

テストプロジェクト

binDebug

user_machine_date timeInOut

binDebug

Page 13: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストの実行

ソリューションフォルダ対象プロジェクト

TestResults

テストプロジェクト

binDebug

user_machine_date timeInOut

binDebug

(1)コンパイル

Page 14: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストの実行

ソリューションフォルダ対象プロジェクト

TestResults

テストプロジェクト

binDebug

user_machine_date timeInOut

binDebug

(2)ローカルコピーの取得

Page 15: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストの実行

ソリューションフォルダ対象プロジェクト

TestResults

テストプロジェクト

binDebug

user_machine_date timeInOut

binDebug

(3)コンパイル

Page 16: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストの実行

ソリューションフォルダ対象プロジェクト

TestResults

テストプロジェクト

binDebug

user_machine_date timeInOut

binDebug

(4)ローカルコピーの取得

Page 17: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストの実行

ソリューションフォルダ対象プロジェクト

TestResults

テストプロジェクト

binDebug

user_machine_date timeInOut

binDebug

(5)実行

Page 18: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

実行フォルダの名称などをどのように知るか

/// <summary>

/// 現在のテストの実行についての情報および機能を

/// 提供するテスト コンテキストを取得または設定します。

///</summary>

public TestContext TestContext

この TestContext を利用します。

Page 19: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

TestContext ってなに?

このようにテストに関する情報等が入っています。

テストの追加情報を出力するための WriteLine などもあります。

Page 20: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストを行う順番 (Part1)

• 追加のテスト属性という Region で囲まれた部分に、テストの準備メソッドなどがあります。

Page 21: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストを行う順番 (Part1)

• [ClassInitialize()]

• [TestInitialize()]

• [TestMethod()]

• [TestCleanup()]

• [TestInitialize()]

• [TestMethod()]

• [TestCleanup()]

• [ClassCleanup()]

繰り返し

Page 22: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストを行う順番 (Part1)

本当はテスト全体の最初と最後もほしい !!!

• [TestGroupInitialize()]

• [ClassInitialize()]

• [TestInitialize()]

• [TestMethod()]

• [TestCleanup()]

• [ClassCleanup()]

• [TestGroupCleanup ()]

繰り返し

Page 23: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

TestGroupInitialize

[ClassInitialize()]public static void

MyClassInitialize(TestContext testContext)

ClassInitialize は static(shared) なメソッドなので、毎回同じ static(shared) な TestGroupInitialize を呼びstatic(shared) なフラグで初回しか動かないようにしておけば TestGroupInitializeは実現できます。

Page 24: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

たとえばこんな使い方はどうでしょう• [TestGroupInitialize()]

– DB 環境の構築• [ClassInitialize()]

– クラス全体のテスト環境 ( マスタ設定など )

• [TestInitialize()]– シナリオに沿った事前準備、トラン系テーブルのク

リア、コネクションの確立• [TestMethod()]• [TestCleanup()]

– コネクションの開放• [ClassCleanup()]

Page 25: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

テストに必要なものを配置する

テストの種類によっては CSV ファイルを用意したりしたい・・・ですよね ?

 やり方は 2 つあります。

Page 26: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (1) testrunconfig

• ソリューションアイテムの testrunconfigを使うことができます。

Page 27: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (1) testrunconfig

Page 28: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (1) testrunconfig

この設定で配置されるファイルはテスト開始前に 1 回だけです。

• Testrunconfig による配置• [ClassInitialize()]• [TestInitialize()]• [TestMethod()]• [TestCleanup()]• [ClassCleanup()]

Page 29: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (1) testrunconfig

配置されるタイミングなどから、これらの配置は

• 上書き変更しないもの• 環境差などを記述しないもの

にとどめましょう。

Page 30: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

毎回変更したい配置

 それでは毎回変更したい配置はどうしたらよいのでしょうか?

TestMethod のプロパティで設定します。

Page 31: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

• テストビューで配置設定したいテストを選択します

Page 32: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

• 配置アイテムという設定があります。

Page 33: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

Page 34: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

Page 35: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

Page 36: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

Page 37: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

Page 38: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

この機能の動くタイミング

• Testrunconfig による配置• [ClassInitialize()]• [TestInitialize()]• DeploymentItem による配置• [TestMethod()]• [TestCleanup()]• [ClassCleanup()]

Page 39: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 (2) DeploymentItemAttibute

この機能の問題点

• ファイルをコピーしたままにする• 共通的な設定を含んだものをこの機能で

上書きすると、以後の設定が変わったままになる

• 完全にテストのためだけの資源にしましょう。

Page 40: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

配置 まとめ配置のタイミングと、特性に気をつけて後始末を必須とするものはコーディングしましょ

う。

• Testrunconfig による配置• [ClassInitialize()]• [TestInitialize()]• DeploymentItem による配置• [TestMethod()]• [TestCleanup()]• [ClassCleanup()]

Page 41: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

データを外部から供給

• データを受けて演算するテストがあります

• そのテストのバリエーションを外部から供給できます。

• SQL Server 2005 の AttachDBFileNameも利用可能です

• 先ほどの Demo1 の四則演算で試してみましょう。

Page 42: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

Demo 2

Page 43: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

DataSource 属性を使ったテスト

この機能の動くタイミング

• Testrunconfig による配置• アタッチ処理• コネクション処理• [ClassInitialize()]• [TestInitialize()]• DeploymentItem による配置• [TestMethod()] ← データ件数だけ繰り返し• [TestCleanup()]• [ClassCleanup()]

Page 44: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

DataSource 属性を使ったテスト

この機能の問題点• AttachDBFileName の機能の制限

– ファイルの場所がフルパスという問題– デタッチしない ( 再起動するとデタッチされ

る )

• TestResults フォルダに証拠が残らない• 全メンバーのディスク環境をそろえられ

ない

Page 45: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

DataSource 属性を使ったテスト

回避方法

• Testrunconfig で .mdf, .ldf を配置する• 本当の初期処理でデタッチする

– EXEC master.dbo.sp_detach_db @dbname = N' テストデータ ', @skipchecks = 'true', @keepfulltextindexfile=N'false'

• 続いてアタッチする– CREATE DATABASE [ テストデータ ] ON – ( FILENAME = N'" + testContext.TestDeploymentDir + @"\ テス

トデータ .mdf' ),– ( FILENAME = N'" + testContext.TestDeploymentDir + @"\ テス

トデータ _log.LDF' )– FOR ATTACH

Page 46: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

コードカバレッジ

 実際にテストがその行を通っているかをチェックし、漏れがないことを確認します。

Page 47: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

Demo 3

Page 48: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

コードカバレッジ• このように赤くなって

いるのがカバーされていない部分です。

• 残念ながらカバレッジでは、テストの正当性は証明されません。( あたりまえ )

• ほかにも保険の switch~ default 文などは実行させることができなかったり、 yield return のようなものでは 100% を保障できません。

Page 49: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

まとめ

• Visual Studio のテストはシンプルにまとまっている

• Team Foundation Server との連携を考えると、単体テストには取り組んでおくほうがよい

• カバレッジ 80 ~ 90% を目指しましょう。• 納品の条件にカバレッジを使えませんか?• VSTE for Database Professional という新しい製

品で SQL のテストも統合可能 ( 詳細はまだ )• テストファーストという新しい概念を採用しな

くても、回帰テストのためにどんどん利用しましょう

Page 50: Visual Studio 2005 を使ったテスト

わんくま同盟 大阪勉強会 #1

Q & A