デスクトップ / Web / モバイル · で、手動テストによるコストや工数の削減、また、テスト自体のミス ... Visual Studio、特にTeam Foundation
Visual Studio 2005 を使ったテスト
-
Upload
garth-burris -
Category
Documents
-
view
35 -
download
4
description
Transcript of Visual Studio 2005 を使ったテスト
わんくま同盟 大阪勉強会 #1
Visual Studio 2005 を使ったテスト
わんくま同盟 大阪勉強会 #1
テスト機能とは?
• 単調な単体テストを繰り返し行ってくれるものです。
• XP(eXtreme Programming) の重要な要素のひとつです。
• 有名な xUnit シリーズなどがあります。
わんくま同盟 大阪勉強会 #1
どのエディションで使えるのですか?
Team System
Team Edition forSoftware
Developers
Team Edition forSoftwareTesters
Team Edition forSoftwareArchitects
ProfessionalVSTO
Standard
ExpressC#
ExpressVB
ExpressC++
ExpressJ#
ExpressWeb
Team Edition forDatabase
Professional
わんくま同盟 大阪勉強会 #1
全エディションにキャンペーン
わんくま同盟 大阪勉強会 #1
開発手法として
ウォーターフォール
プロトタイピングモデルや XP
わんくま同盟 大阪勉強会 #1
XP とは?
• リリースは小規模に・複数回(プロトタイピングモデルはウォークスルーの実現だけを行えば破棄してる場合が多い)
• ペアプログラミング• ユーザと物理的に近距離で行う• テストコードを書いて常に流す ( それをテ
ストのメインにする )
XPXP をいきなり全社的にをいきなり全社的に
行うのは非常にリスキー行うのは非常にリスキー
わんくま同盟 大阪勉強会 #1
ウォーターフォールとは
要件定義
外部設計
内部設計
コーディング
単体テスト
結合テスト
システムテスト
わんくま同盟 大阪勉強会 #1
テスト対象機能 条件 確認項目 確認日 確認者ユーザテーブルにレコードが登録されていることユーザIDが新規に振られていることユーザ名が指定のものであることメールアドレスが指定のものであることパスワードが指定のものであること例外が発生することユーザテーブルにレコードが登録されていないこと例外が発生することユーザテーブルにレコードが登録されていないこと例外が発生することユーザテーブルにレコードが登録されていないこと例外が発生することユーザテーブルにレコードが登録されていないこと例外が発生することユーザテーブルにレコードが登録されていないこと
ユーザ登録
正常に登録できること
ユーザ名がNullの場合
ユーザ名がすでに存在している場合
メールアドレスがすでに存在している場合
メールアドレスがNullの場合
パスワードがNullの場合
テスト項目書つくっていませんか?
わんくま同盟 大阪勉強会 #1
Demo 1
わんくま同盟 大阪勉強会 #1
どのような仕掛けで動いているの?
• TestClass 属性の付いているクラスの・・・
[TestClass()]
public class 四則演算 Test
• TestMethod 属性の付いているメソッドが対象です。
[TestMethod()]
public void 足し算 Test()
わんくま同盟 大阪勉強会 #1
どのフォルダで動いているの?
• ソリューションフォルダの TestResultsというフォルダ配下に、テストのユーザ・マシン・日時 \Out というフォルダを作成し、そこで動きます。
わんくま同盟 大阪勉強会 #1
テストの実行
ソリューションフォルダ対象プロジェクト
TestResults
テストプロジェクト
binDebug
user_machine_date timeInOut
binDebug
わんくま同盟 大阪勉強会 #1
テストの実行
ソリューションフォルダ対象プロジェクト
TestResults
テストプロジェクト
binDebug
user_machine_date timeInOut
binDebug
(1)コンパイル
わんくま同盟 大阪勉強会 #1
テストの実行
ソリューションフォルダ対象プロジェクト
TestResults
テストプロジェクト
binDebug
user_machine_date timeInOut
binDebug
(2)ローカルコピーの取得
わんくま同盟 大阪勉強会 #1
テストの実行
ソリューションフォルダ対象プロジェクト
TestResults
テストプロジェクト
binDebug
user_machine_date timeInOut
binDebug
(3)コンパイル
わんくま同盟 大阪勉強会 #1
テストの実行
ソリューションフォルダ対象プロジェクト
TestResults
テストプロジェクト
binDebug
user_machine_date timeInOut
binDebug
(4)ローカルコピーの取得
わんくま同盟 大阪勉強会 #1
テストの実行
ソリューションフォルダ対象プロジェクト
TestResults
テストプロジェクト
binDebug
user_machine_date timeInOut
binDebug
(5)実行
わんくま同盟 大阪勉強会 #1
実行フォルダの名称などをどのように知るか
/// <summary>
/// 現在のテストの実行についての情報および機能を
/// 提供するテスト コンテキストを取得または設定します。
///</summary>
public TestContext TestContext
この TestContext を利用します。
わんくま同盟 大阪勉強会 #1
TestContext ってなに?
このようにテストに関する情報等が入っています。
テストの追加情報を出力するための WriteLine などもあります。
わんくま同盟 大阪勉強会 #1
テストを行う順番 (Part1)
• 追加のテスト属性という Region で囲まれた部分に、テストの準備メソッドなどがあります。
わんくま同盟 大阪勉強会 #1
テストを行う順番 (Part1)
• [ClassInitialize()]
• [TestInitialize()]
• [TestMethod()]
• [TestCleanup()]
• [TestInitialize()]
• [TestMethod()]
• [TestCleanup()]
• [ClassCleanup()]
繰り返し
わんくま同盟 大阪勉強会 #1
テストを行う順番 (Part1)
本当はテスト全体の最初と最後もほしい !!!
• [TestGroupInitialize()]
• [ClassInitialize()]
• [TestInitialize()]
• [TestMethod()]
• [TestCleanup()]
• [ClassCleanup()]
• [TestGroupCleanup ()]
繰り返し
わんくま同盟 大阪勉強会 #1
TestGroupInitialize
[ClassInitialize()]public static void
MyClassInitialize(TestContext testContext)
ClassInitialize は static(shared) なメソッドなので、毎回同じ static(shared) な TestGroupInitialize を呼びstatic(shared) なフラグで初回しか動かないようにしておけば TestGroupInitializeは実現できます。
わんくま同盟 大阪勉強会 #1
たとえばこんな使い方はどうでしょう• [TestGroupInitialize()]
– DB 環境の構築• [ClassInitialize()]
– クラス全体のテスト環境 ( マスタ設定など )
• [TestInitialize()]– シナリオに沿った事前準備、トラン系テーブルのク
リア、コネクションの確立• [TestMethod()]• [TestCleanup()]
– コネクションの開放• [ClassCleanup()]
わんくま同盟 大阪勉強会 #1
テストに必要なものを配置する
テストの種類によっては CSV ファイルを用意したりしたい・・・ですよね ?
やり方は 2 つあります。
わんくま同盟 大阪勉強会 #1
配置 (1) testrunconfig
• ソリューションアイテムの testrunconfigを使うことができます。
わんくま同盟 大阪勉強会 #1
配置 (1) testrunconfig
わんくま同盟 大阪勉強会 #1
配置 (1) testrunconfig
この設定で配置されるファイルはテスト開始前に 1 回だけです。
• Testrunconfig による配置• [ClassInitialize()]• [TestInitialize()]• [TestMethod()]• [TestCleanup()]• [ClassCleanup()]
わんくま同盟 大阪勉強会 #1
配置 (1) testrunconfig
配置されるタイミングなどから、これらの配置は
• 上書き変更しないもの• 環境差などを記述しないもの
にとどめましょう。
わんくま同盟 大阪勉強会 #1
毎回変更したい配置
それでは毎回変更したい配置はどうしたらよいのでしょうか?
TestMethod のプロパティで設定します。
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
• テストビューで配置設定したいテストを選択します
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
• 配置アイテムという設定があります。
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
この機能の動くタイミング
• Testrunconfig による配置• [ClassInitialize()]• [TestInitialize()]• DeploymentItem による配置• [TestMethod()]• [TestCleanup()]• [ClassCleanup()]
わんくま同盟 大阪勉強会 #1
配置 (2) DeploymentItemAttibute
この機能の問題点
• ファイルをコピーしたままにする• 共通的な設定を含んだものをこの機能で
上書きすると、以後の設定が変わったままになる
• 完全にテストのためだけの資源にしましょう。
わんくま同盟 大阪勉強会 #1
配置 まとめ配置のタイミングと、特性に気をつけて後始末を必須とするものはコーディングしましょ
う。
• Testrunconfig による配置• [ClassInitialize()]• [TestInitialize()]• DeploymentItem による配置• [TestMethod()]• [TestCleanup()]• [ClassCleanup()]
わんくま同盟 大阪勉強会 #1
データを外部から供給
• データを受けて演算するテストがあります
• そのテストのバリエーションを外部から供給できます。
• SQL Server 2005 の AttachDBFileNameも利用可能です
• 先ほどの Demo1 の四則演算で試してみましょう。
わんくま同盟 大阪勉強会 #1
Demo 2
わんくま同盟 大阪勉強会 #1
DataSource 属性を使ったテスト
この機能の動くタイミング
• Testrunconfig による配置• アタッチ処理• コネクション処理• [ClassInitialize()]• [TestInitialize()]• DeploymentItem による配置• [TestMethod()] ← データ件数だけ繰り返し• [TestCleanup()]• [ClassCleanup()]
わんくま同盟 大阪勉強会 #1
DataSource 属性を使ったテスト
この機能の問題点• AttachDBFileName の機能の制限
– ファイルの場所がフルパスという問題– デタッチしない ( 再起動するとデタッチされ
る )
• TestResults フォルダに証拠が残らない• 全メンバーのディスク環境をそろえられ
ない
わんくま同盟 大阪勉強会 #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
わんくま同盟 大阪勉強会 #1
コードカバレッジ
実際にテストがその行を通っているかをチェックし、漏れがないことを確認します。
わんくま同盟 大阪勉強会 #1
Demo 3
わんくま同盟 大阪勉強会 #1
コードカバレッジ• このように赤くなって
いるのがカバーされていない部分です。
• 残念ながらカバレッジでは、テストの正当性は証明されません。( あたりまえ )
• ほかにも保険の switch~ default 文などは実行させることができなかったり、 yield return のようなものでは 100% を保障できません。
わんくま同盟 大阪勉強会 #1
まとめ
• Visual Studio のテストはシンプルにまとまっている
• Team Foundation Server との連携を考えると、単体テストには取り組んでおくほうがよい
• カバレッジ 80 ~ 90% を目指しましょう。• 納品の条件にカバレッジを使えませんか?• VSTE for Database Professional という新しい製
品で SQL のテストも統合可能 ( 詳細はまだ )• テストファーストという新しい概念を採用しな
くても、回帰テストのためにどんどん利用しましょう
わんくま同盟 大阪勉強会 #1
Q & A