1 / 50

Visual Studio 2005 を使ったテスト

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

Download Presentation

Visual Studio 2005 を使ったテスト

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual Studio 2005を使ったテスト

  2. テスト機能とは? • 単調な単体テストを繰り返し行ってくれるものです。 • XP(eXtreme Programming)の重要な要素のひとつです。 • 有名なxUnitシリーズなどがあります。

  3. どのエディションで使えるのですか? Team System Team Edition forDatabaseProfessional Team Edition forSoftwareArchitects Team Edition forSoftwareDevelopers Team Edition forSoftwareTesters VSTO Professional Standard Express C# Express VB Express C++ Express J# Express Web

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

  5. 開発手法として ウォーター フォール プロトタイピング モデルやXP

  6. XPとは? • リリースは小規模に・複数回(プロトタイピングモデルはウォークスルーの実現だけを行えば破棄してる場合が多い) • ペアプログラミング • ユーザと物理的に近距離で行う • テストコードを書いて常に流す(それをテストのメインにする) XPをいきなり全社的に 行うのは非常にリスキー

  7. ウォーターフォールとは テストを行っている

  8. テスト項目書つくっていませんか? この確認を自動化しましょう

  9. Demo 1

  10. どのような仕掛けで動いているの? • TestClass属性の付いているクラスの・・・ [TestClass()] public class 四則演算Test • TestMethod属性の付いているメソッドが対象です。 [TestMethod()] public void 足し算Test()

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

  12. テストの実行

  13. テストの実行

  14. テストの実行

  15. テストの実行

  16. テストの実行

  17. テストの実行

  18. 実行フォルダの名称などをどのように知るか ///<summary> ///現在のテストの実行についての情報および機能を ///提供するテスト コンテキストを取得または設定します。 ///</summary> public TestContext TestContext このTestContextを利用します。

  19. TestContextってなに? このようにテストに関する情報等が入っています。 テストの追加情報を出力するためのWriteLineなどもあります。

  20. テストを行う順番(Part1) • 追加のテスト属性というRegionで囲まれた部分に、テストの準備メソッドなどがあります。

  21. テストを行う順番(Part1) • [ClassInitialize()] • [TestInitialize()] • [TestMethod()] • [TestCleanup()] • [TestInitialize()] • [TestMethod()] • [TestCleanup()] • [ClassCleanup()] 繰り返し

  22. テストを行う順番(Part1) 本当はテスト全体の最初と最後もほしい!!! • [TestGroupInitialize()] • [ClassInitialize()] • [TestInitialize()] • [TestMethod()] • [TestCleanup()] • [ClassCleanup()] • [TestGroupCleanup ()] 繰り返し

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

  24. たとえばこんな使い方はどうでしょう • [TestGroupInitialize()] • DB環境の構築 • [ClassInitialize()] • クラス全体のテスト環境(マスタ設定など) • [TestInitialize()] • シナリオに沿った事前準備、トラン系テーブルのクリア、コネクションの確立 • [TestMethod()] • [TestCleanup()] • コネクションの開放 • [ClassCleanup()]

  25. テストに必要なものを配置する テストの種類によってはCSVファイルを用意したりしたい・・・ですよね?  やり方は2つあります。

  26. 配置(1) testrunconfig • ソリューションアイテムのtestrunconfigを使うことができます。

  27. 配置(1) testrunconfig

  28. 配置(1) testrunconfig この設定で配置されるファイルはテスト開始前に1回だけです。 • Testrunconfigによる配置 • [ClassInitialize()] • [TestInitialize()] • [TestMethod()] • [TestCleanup()] • [ClassCleanup()]

  29. 配置(1) testrunconfig 配置されるタイミングなどから、これらの配置は • 上書き変更しないもの • 環境差などを記述しないもの にとどめましょう。

  30. 毎回変更したい配置  それでは毎回変更したい配置はどうしたらよいのでしょうか? TestMethodのプロパティで設定します。

  31. 配置(2) DeploymentItemAttibute • テストビューで配置設定したいテストを選択します

  32. 配置(2) DeploymentItemAttibute • 配置アイテムという設定があります。

  33. 配置(2) DeploymentItemAttibute

  34. 配置(2) DeploymentItemAttibute

  35. 配置(2) DeploymentItemAttibute

  36. 配置(2) DeploymentItemAttibute

  37. 配置(2) DeploymentItemAttibute

  38. 配置(2) DeploymentItemAttibute この機能の動くタイミング • Testrunconfigによる配置 • [ClassInitialize()] • [TestInitialize()] • DeploymentItemによる配置 • [TestMethod()] • [TestCleanup()] • [ClassCleanup()]

  39. 配置(2) DeploymentItemAttibute この機能の問題点 • ファイルをコピーしたままにする • 共通的な設定を含んだものをこの機能で上書きすると、以後の設定が変わったままになる • 完全にテストのためだけの資源にしましょう。

  40. 配置 まとめ 配置のタイミングと、特性に気をつけて 後始末を必須とするものはコーディングしましょう。 • Testrunconfigによる配置 • [ClassInitialize()] • [TestInitialize()] • DeploymentItemによる配置 • [TestMethod()] • [TestCleanup()] • [ClassCleanup()]

  41. データを外部から供給 • データを受けて演算するテストがあります • そのテストのバリエーションを外部から供給できます。 • SQL Server 2005 の AttachDBFileNameも利用可能です • 先ほどのDemo1の四則演算で試してみましょう。

  42. Demo 2

  43. DataSource属性を使ったテスト この機能の動くタイミング • Testrunconfigによる配置 • アタッチ処理 • コネクション処理 • [ClassInitialize()] • [TestInitialize()] • DeploymentItemによる配置 • [TestMethod()] ←データ件数だけ繰り返し • [TestCleanup()] • [ClassCleanup()]

  44. DataSource属性を使ったテスト この機能の問題点 • AttachDBFileNameの機能の制限 • ファイルの場所がフルパスという問題 • デタッチしない(再起動するとデタッチされる) • TestResultsフォルダに証拠が残らない • 全メンバーのディスク環境をそろえられない

  45. 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

  46. コードカバレッジ  実際にテストがその行を通っているかをチェックし、漏れがないことを確認します。

  47. Demo 3

  48. コードカバレッジ • このように赤くなっているのがカバーされていない部分です。 • 残念ながらカバレッジでは、テストの正当性は証明されません。(あたりまえ) • ほかにも保険のswitch~default文などは実行させることができなかったり、yield returnのようなものでは100%を保障できません。

  49. まとめ • Visual Studioのテストはシンプルにまとまっている • Team Foundation Serverとの連携を考えると、単体テストには取り組んでおくほうがよい • カバレッジ80~90%を目指しましょう。 • 納品の条件にカバレッジを使えませんか? • VSTE for Database Professionalという新しい製品でSQLのテストも統合可能(詳細はまだ) • テストファーストという新しい概念を採用しなくても、回帰テストのためにどんどん利用しましょう

  50. Q & A

More Related