xUTP Chapter19 (2). Testcase Class

Takuto Wada
Takuto WadaChief Executive Programmer at Towersquest
Chapter 19.
xUnit Basic
Patterns(2)
●   Test Definition
    ●   Test Method
        –   Four-Phase Test
    ●   Assertion Method
        –   Assertion Message
    ●   Testcase Class
●   Test Execution
    ●   Test Runner
    ●   Testcase Object
    ●   Test Suite Object
    ●   Test Discovery
    ●   Test Enumeration
    ●   Test Selection
Testcase Class
●   Test Definition
    ●   Test Method
        –   Four-Phase Test
    ●   Assertion Method
        –   Assertion Message
    ●   Testcase Class
●   Test Execution
    ●   Test Runner
    ●   Testcase Object
    ●   Test Suite Object
    ●   Test Discovery
    ●   Test Enumeration
    ●   Test Selection
Testcase Class
●   テストコードをどこに書く?
    ●   関連する Test Method を単一の Testcase Class に
        配置する
    ●   Testcase Class は複数の Test Method の置き場所と
        なり、(実行時にそれらメソッドは) Testcase Object に
        なる
●   How It Works
    ●   Testcase Class は実行時に Test Suite Factory
        (p399) として働き、 Test Method 毎に Testcase
        Object を作成する
    ●   Testcase Class は作成した Testcase Object を Test
        Suite Object (p387) に渡し、 Test Runner (p377)
        がまとめて実行する
Why We Do This
●   オブジェクト指向言語を使うとき、 Test Method を
    グローバル関数や手続きにするのではなく、 クラス
    に置きたい
●   Test Method を Testcase Class のインスタンス
    メソッドにしておくことで、 Test Method 毎に
    Testcase Class をインスタンス化し、 Testcase
    Object を作成することができる
    ●   この方法であれば、実行時に Test Method に手を入
        れる (manipulate) ことができる
●   もちろん Test Method 毎にクラスを作る手もある
    が、オーバーヘッドはあるし名前空間は荒れるしテ
    スト間の共通化、再利用は難しくなるしで良いこと
    がない
Implementation Notes
●   Testcase Class の魔法は実行時に現れる
    ●   詳しくは Testcase Object と Test Runner 参照
    ●   テストロジックを Test Method に書いてあとは Test
        Runner の魔法に任せれば良い
●   Test Code Duplication (p213) は Extract
    Method して Test Utility Method にする
    ●   抽出したメソッドを…
        –   (Abstract) Testcase Superclass (p638) に引き上げたり
        –   Test Helper class (p643) にしたり
        –   Test Helper Mixin (p638) にしたりできる
Example: Testcase Class
public class TestScheduleFlight extends TestCase {

    public void testUnscheduled_shouldEndUpInScheduled() throws Exception {
      Flight flight = FlightTestHelper.getAnonymousFlightInUnscheduledState();
      flight.schedule();
      assertTrue("isScheduled()", flight.isScheduled());
    }
                     
    public void testScheduledState_shouldThrowInvalidRequestEx()
         throws Exception {
      Flight flight = FlightTestHelper.getAnonymousFlightInScheduledState();
      try {
         flight.schedule();
         fail("not allowed in scheduled state");
      } catch (InvalidRequestException e) {
         assertEquals("InvalidRequestException.getRequest()",
                        "schedule", e.getRequest());
         assertTrue("isScheduled()", flight.isScheduled());
      }
    }

}
Further Reading
●   xUnit のいくつか(たとえば VbUnit や NUnit)で
    は、 Testcase Class は “test fixture” と呼ばれる
    ●   xUTP の文脈で言うところの Test Fixture と混同して
        はならない
●   Fit フレームワークも fixture という言葉をつかう
    ●   Fit の fixture は Fit table の Adapter で、 Data-
        Driven Test の Interpreter として作用する
Test Runner
●   Test Definition
    ●   Test Method
        –   Four-Phase Test
    ●   Assertion Method
        –   Assertion Message
    ●   Testcase Class
●   Test Execution
    ●   Test Runner
    ●   Testcase Object
    ●   Test Suite Object
    ●   Test Discovery
    ●   Test Enumeration
    ●   Test Selection
Test Runner
●   テストをどうやって実行する?
    ●   Test Suite Object をインスタンス化し suite 内の
        Testcase Object 全てを実行するようなアプリ (Test
        Runner) を使う
●   How It Works
    ●   xUnit ファミリーには CUI や GUI からテストを実行して
        結果をレポートさせる機能がある
    ●   Test Runner はテストの Composite[GoF] を作るため
        に…
        –   Test Enumeration (p399)
        –   Test Discovery (p393)
        –   Test Selection (p403) …などを使う
How It Works (2)
●   走らせる Composite は以下のどれでも良い
    ●   単一の Testcase Object
    ●   Test Suite Object
    ●   Composite Test Suite (Suite of Suite)
●   どれでも同じように走らせられるのは同じ
    interface を実装しているから
    ●   Test Runner は実行に際して単一のテストを実行して
        いるのか複数のテストを実行しているのかを意識しなく
        て良い
●   Test Runner はテスト実行、アサーション失敗、エ
    ラーや例外の数などをトラッキングしてレポートする
Why We Do This
●   test automator によってテスト実行の流儀が違う
    のは望ましくない。誰でも同じように実行できるのが
    望ましい
●   Test Runner を標準にすることで、他の人の書いた
    テストコードでも楽に実行できる
    ●   別の方法で同じテストを実行する手段も同時に提供で
        きる(★?)
Implementation Notes
●   代表的な Test Runner は
    ●   IDE に統合された GUI から使う Test Runner
    ●   コマンドラインから走らせる Test Runner
●   Standard Test Interface があるから Test
    Runner はどれでも実行できる
    ●   静的型付け言語の場合は Testcase Object や Test
        Suite Object が実装すべき interface を提供している
        –   C# や新しめの Java では attribute や annotation で素のク
            ラスに test interface を織り込めるものがある
    ●   動的型付け言語の場合は明示的な test interface は
        無いが、 duck-typing 的に解決する
Implementation Notes (2)
●   代表的な test interface は…
    ●   テストの数を答えるメソッド
    ●   テストを実行するメソッド
    ●   テストフレームワークが Test Enumeration をサポートする
        場合には、 Testcase Class や suite class (★特定の仕組
        みを継承しない AllTests などか★) は Test Suite Factory
        メソッド (たいがいは “suite” というメソッド) も実装しないと
        いけない
●   Test Runner のバリエーション
    ●   GUI
    ●   コマンドライン
    ●   File System Test Runner (指定ディレクトリ以下を探す)
    ●   Test Tree Explorer (Eclipse の Test Tree とか)
Testcase Object
●   Test Definition
    ●   Test Method
        –   Four-Phase Test
    ●   Assertion Method
        –   Assertion Message
    ●   Testcase Class
●   Test Execution
    ●   Test Runner
    ●   Testcase Object
    ●   Test Suite Object
    ●   Test Discovery
    ●   Test Enumeration
    ●   Test Selection
Testcase Object
●   テストをどうやって実行する?
    ●   Command[GoF] オブジェクトを各テスト (Test
        Method) 毎に作成し、 run メソッドを呼び出す
    ●   この機能があるので、 GUI の Test Runner は Tree を
        クリックしてテストを一つ選択して実行とかできる
●   How It Works
    ●   各テスト毎に Command オブジェクトをつくる
        –   Testcase Class を Test Suite Factory として使い、
            Testcase Object を保持する Test Suite Object を作る
        –   Test Discovery または Test Enumeration を使って
            Testcase Object 群をつくる
Why We Do This
●   テストを手続きでなく first-class object として扱う
    ことで、いろいろな可能性が開ける
    ●   オブジェクトであれば、 Test Runner や Test
        Automation Framework から操作(や介入)しやすい
        –   コレクションとして持つこともでき (Test Suite Object) ,それ
            らをイテレートし、実行し…
●   xUnit ファミリー (のほとんど) は Test Method 毎
    に独立した Testcase Object のインスタンスを作
    り、 Independent Test (p42) を実現する
    ●   もちろん、例外はある (TestNG や NUnit)
        –   Testcase Object のインスタンスを使いまわす
Implementation Notes
●   Testcase Object が標準的な interface を実装し
    ているので、 Test Runner はテストの中身を気に
    せずに実行できる
    ●   これが Command [GoF] の威力!
●   Test
    ●   Test Method 毎にクラスを分けることもできるがオスス
        メしない
        –   Test Utility Method の共有を妨げる
    ●   どのテストを実行するかを指定する仕組みが必要
        –   Pluggable Behaviour [SBPP] がつかえる
             ●   テスト名をテストクラスのコンストラクタに渡す
ご清聴
 ありがとう
ございました
1 of 22

Recommended

xUnit Test Patterns - Chapter11 by
xUnit Test Patterns - Chapter11xUnit Test Patterns - Chapter11
xUnit Test Patterns - Chapter11Takuto Wada
5.8K views19 slides
20161203 selenium adventcalender by
20161203 selenium adventcalender20161203 selenium adventcalender
20161203 selenium adventcalenderNaoya Kojima
949 views11 slides
Spock's world by
Spock's worldSpock's world
Spock's worldTakuma Watabiki
4.4K views41 slides
CLRH_120414_WFTDD by
CLRH_120414_WFTDDCLRH_120414_WFTDD
CLRH_120414_WFTDDTomoyuki Obi
773 views49 slides
Beyond JUnit3 by
Beyond JUnit3Beyond JUnit3
Beyond JUnit3Koichi Sakata
691 views57 slides
Test Plugins by
Test PluginsTest Plugins
Test Pluginsykhr
684 views28 slides

More Related Content

What's hot

ソフトウェア・テスト入門8 by
ソフトウェア・テスト入門8ソフトウェア・テスト入門8
ソフトウェア・テスト入門8Kenta Hattori
307 views17 slides
wankuma #28 by
wankuma #28wankuma #28
wankuma #28高見 知英
542 views16 slides
Effective Java 輪読会 第6章 項目35-37 by
Effective Java 輪読会 第6章 項目35-37Effective Java 輪読会 第6章 項目35-37
Effective Java 輪読会 第6章 項目35-37Appresso Engineering Team
1.3K views28 slides
About func unit by
About func unitAbout func unit
About func unitgray Space
335 views6 slides
PHPUnitTest勉強会スライド by
PHPUnitTest勉強会スライドPHPUnitTest勉強会スライド
PHPUnitTest勉強会スライドssuser7a9029
34 views25 slides
Unity testtool by
Unity testtoolUnity testtool
Unity testtool大介 束田
9K views25 slides

What's hot(17)

ソフトウェア・テスト入門8 by Kenta Hattori
ソフトウェア・テスト入門8ソフトウェア・テスト入門8
ソフトウェア・テスト入門8
Kenta Hattori307 views
About func unit by gray Space
About func unitAbout func unit
About func unit
gray Space335 views
PHPUnitTest勉強会スライド by ssuser7a9029
PHPUnitTest勉強会スライドPHPUnitTest勉強会スライド
PHPUnitTest勉強会スライド
ssuser7a902934 views
PHPUnit でテスト駆動開発を始めよう by Yuya Takeyama
PHPUnit でテスト駆動開発を始めようPHPUnit でテスト駆動開発を始めよう
PHPUnit でテスト駆動開発を始めよう
Yuya Takeyama16.1K views
Ruby初級者向けレッスン 第46回 ─── Test::Unit by higaki
Ruby初級者向けレッスン 第46回 ─── Test::UnitRuby初級者向けレッスン 第46回 ─── Test::Unit
Ruby初級者向けレッスン 第46回 ─── Test::Unit
higaki4.4K views
OpenFOAMにおけるDEM計算の衝突モデルの解読 by takuyayamamoto1800
OpenFOAMにおけるDEM計算の衝突モデルの解読OpenFOAMにおけるDEM計算の衝突モデルの解読
OpenFOAMにおけるDEM計算の衝突モデルの解読
takuyayamamoto18009.2K views
Unit testで定時帰宅! by Funato Takashi
Unit testで定時帰宅!Unit testで定時帰宅!
Unit testで定時帰宅!
Funato Takashi2.9K views
Unowned / Weak References with Closure by Naruki Chigira
Unowned / Weak References with ClosureUnowned / Weak References with Closure
Unowned / Weak References with Closure
Naruki Chigira1.4K views
ありえるえりあ勉強会@五反田~テスト編~ Part3 by Tomoyuki Sato
ありえるえりあ勉強会@五反田~テスト編~ Part3ありえるえりあ勉強会@五反田~テスト編~ Part3
ありえるえりあ勉強会@五反田~テスト編~ Part3
Tomoyuki Sato667 views
OpenFOAMのDEM解析のpatchInteractionModelクラスの解読 by takuyayamamoto1800
OpenFOAMのDEM解析のpatchInteractionModelクラスの解読OpenFOAMのDEM解析のpatchInteractionModelクラスの解読
OpenFOAMのDEM解析のpatchInteractionModelクラスの解読
takuyayamamoto18004.7K views
はこだてIKA 第4回勉強会 単体テスト by Seiji KOMATSU
はこだてIKA 第4回勉強会 単体テストはこだてIKA 第4回勉強会 単体テスト
はこだてIKA 第4回勉強会 単体テスト
Seiji KOMATSU783 views
Shibya.trac #2: TracとTestLinkの合わせ技 by Toshiyuki Kawanishi
Shibya.trac #2: TracとTestLinkの合わせ技Shibya.trac #2: TracとTestLinkの合わせ技
Shibya.trac #2: TracとTestLinkの合わせ技
Toshiyuki Kawanishi4.1K views
Perlのテストがわからない by Yusuke Hosokoshi
PerlのテストがわからないPerlのテストがわからない
Perlのテストがわからない
Yusuke Hosokoshi4.6K views

Similar to xUTP Chapter19 (2). Testcase Class

xUnit Test Patterns - Chapter19 by
xUnit Test Patterns - Chapter19xUnit Test Patterns - Chapter19
xUnit Test Patterns - Chapter19Takuto Wada
4.3K views58 slides
Tokyor14 - R言語でユニットテスト by
Tokyor14 - R言語でユニットテストTokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテストYohei Sato
6.6K views41 slides
xUnit Test Patterns - Chapter16 by
xUnit Test Patterns - Chapter16xUnit Test Patterns - Chapter16
xUnit Test Patterns - Chapter16Takuto Wada
4K views90 slides
ソフトウェア工学2023 11 テスト by
ソフトウェア工学2023 11 テストソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テストToru Tamaki
12 views83 slides
xUTP Chapter26. Dependency Injection by
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency InjectionTakuto Wada
4.3K views14 slides
Introduction to Continuous Test Runner MakeGood by
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGoodAtsuhiro Kubo
1.2K views39 slides

Similar to xUTP Chapter19 (2). Testcase Class(20)

xUnit Test Patterns - Chapter19 by Takuto Wada
xUnit Test Patterns - Chapter19xUnit Test Patterns - Chapter19
xUnit Test Patterns - Chapter19
Takuto Wada4.3K views
Tokyor14 - R言語でユニットテスト by Yohei Sato
Tokyor14 - R言語でユニットテストTokyor14 - R言語でユニットテスト
Tokyor14 - R言語でユニットテスト
Yohei Sato6.6K views
xUnit Test Patterns - Chapter16 by Takuto Wada
xUnit Test Patterns - Chapter16xUnit Test Patterns - Chapter16
xUnit Test Patterns - Chapter16
Takuto Wada4K views
ソフトウェア工学2023 11 テスト by Toru Tamaki
ソフトウェア工学2023 11 テストソフトウェア工学2023 11 テスト
ソフトウェア工学2023 11 テスト
Toru Tamaki12 views
xUTP Chapter26. Dependency Injection by Takuto Wada
xUTP Chapter26. Dependency InjectionxUTP Chapter26. Dependency Injection
xUTP Chapter26. Dependency Injection
Takuto Wada4.3K views
Introduction to Continuous Test Runner MakeGood by Atsuhiro Kubo
Introduction to Continuous Test Runner MakeGoodIntroduction to Continuous Test Runner MakeGood
Introduction to Continuous Test Runner MakeGood
Atsuhiro Kubo1.2K views
究極のバッチフレームワーク(予定) by fumoto kazuhiro
究極のバッチフレームワーク(予定)究極のバッチフレームワーク(予定)
究極のバッチフレームワーク(予定)
fumoto kazuhiro1.4K views
TDD Boot Camp Tokyo for C++ 2014-01 補講 by Takashi Imagire
TDD Boot Camp Tokyo for C++ 2014-01 補講TDD Boot Camp Tokyo for C++ 2014-01 補講
TDD Boot Camp Tokyo for C++ 2014-01 補講
Takashi Imagire2.3K views
Apache Wicketのユニットテスト機能 by Hiroto Yamakawa
Apache Wicketのユニットテスト機能Apache Wicketのユニットテスト機能
Apache Wicketのユニットテスト機能
Hiroto Yamakawa1.8K views
Junit4 by ichikaz3
Junit4Junit4
Junit4
ichikaz33.2K views
あんなテスト、こんなテスト(this and that about testing) by Takuya Tsuchida
あんなテスト、こんなテスト(this and that about testing)あんなテスト、こんなテスト(this and that about testing)
あんなテスト、こんなテスト(this and that about testing)
Takuya Tsuchida2.4K views
第4回勉強会 単体テストのすすめ by hakoika-itwg
第4回勉強会 単体テストのすすめ第4回勉強会 単体テストのすすめ
第4回勉強会 単体テストのすすめ
hakoika-itwg9.4K views
TDD勉強会キックオフ for Java by Yuta Kawadai
TDD勉強会キックオフ for JavaTDD勉強会キックオフ for Java
TDD勉強会キックオフ for Java
Yuta Kawadai1.1K views
システムテスト自動化標準ガイド 5章発表資料 by Masatoshi Itoh
システムテスト自動化標準ガイド 5章発表資料システムテスト自動化標準ガイド 5章発表資料
システムテスト自動化標準ガイド 5章発表資料
Masatoshi Itoh2.7K views
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう by UnityTechnologiesJapan002
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
【Unite Tokyo 2019】Unity Test Runnerを活用して内部品質を向上しよう
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス by Nozomi Ito
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
実践で学ぶ、効率的な自動テストスクリプトのメンテナンス
Nozomi Ito40.1K views
リファクタリング読書会20120220 by Suguru Shirai
リファクタリング読書会20120220リファクタリング読書会20120220
リファクタリング読書会20120220
Suguru Shirai1K views
Getting Started with Testing using PHPUnit by Atsuhiro Kubo
Getting Started with Testing using PHPUnitGetting Started with Testing using PHPUnit
Getting Started with Testing using PHPUnit
Atsuhiro Kubo1.2K views
タダで始めるテストファースト入門 ~ C# Express + NUnit by Yasuhiko Yamamoto
タダで始めるテストファースト入門 ~ C# Express + NUnitタダで始めるテストファースト入門 ~ C# Express + NUnit
タダで始めるテストファースト入門 ~ C# Express + NUnit
Yasuhiko Yamamoto3.3K views

More from Takuto Wada

組織にテストを書く文化を根付かせる戦略と戦術 by
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
76.4K views33 slides
OSS活動の活発さと評価の関係について by
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係についてTakuto Wada
14.7K views64 slides
unassert - encourage reliable programming by writing assertions in production by
unassert - encourage reliable programming by writing assertions in productionunassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in productionTakuto Wada
18.1K views36 slides
OSS についてあれこれ by
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれTakuto Wada
41.8K views65 slides
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 by
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」Takuto Wada
148.6K views45 slides
power-assert, mechanism and philosophy by
power-assert, mechanism and philosophypower-assert, mechanism and philosophy
power-assert, mechanism and philosophyTakuto Wada
48.4K views29 slides

More from Takuto Wada(20)

組織にテストを書く文化を根付かせる戦略と戦術 by Takuto Wada
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
Takuto Wada76.4K views
OSS活動の活発さと評価の関係について by Takuto Wada
OSS活動の活発さと評価の関係についてOSS活動の活発さと評価の関係について
OSS活動の活発さと評価の関係について
Takuto Wada14.7K views
unassert - encourage reliable programming by writing assertions in production by Takuto Wada
unassert - encourage reliable programming by writing assertions in productionunassert - encourage reliable programming by writing assertions in production
unassert - encourage reliable programming by writing assertions in production
Takuto Wada18.1K views
OSS についてあれこれ by Takuto Wada
OSS についてあれこれOSS についてあれこれ
OSS についてあれこれ
Takuto Wada41.8K views
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」 by Takuto Wada
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada148.6K views
power-assert, mechanism and philosophy by Takuto Wada
power-assert, mechanism and philosophypower-assert, mechanism and philosophy
power-assert, mechanism and philosophy
Takuto Wada48.4K views
アジャイルサムライの次に読む技術書 by Takuto Wada
アジャイルサムライの次に読む技術書アジャイルサムライの次に読む技術書
アジャイルサムライの次に読む技術書
Takuto Wada25.6K views
Test Yourself - テストを書くと何がどう変わるか by Takuto Wada
Test Yourself - テストを書くと何がどう変わるかTest Yourself - テストを書くと何がどう変わるか
Test Yourself - テストを書くと何がどう変わるか
Takuto Wada38.3K views
テスト用ライブラリ power-assert by Takuto Wada
テスト用ライブラリ power-assertテスト用ライブラリ power-assert
テスト用ライブラリ power-assert
Takuto Wada12.7K views
Reviewing RESTful Web Apps by Takuto Wada
Reviewing RESTful Web AppsReviewing RESTful Web Apps
Reviewing RESTful Web Apps
Takuto Wada9K views
power-assert in JavaScript by Takuto Wada
power-assert in JavaScriptpower-assert in JavaScript
power-assert in JavaScript
Takuto Wada9K views
TDD のこころ @ OSH2014 by Takuto Wada
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
Takuto Wada15.8K views
テストを書く文化を育てる戦略と戦術 by Takuto Wada
テストを書く文化を育てる戦略と戦術テストを書く文化を育てる戦略と戦術
テストを書く文化を育てる戦略と戦術
Takuto Wada49.4K views
私にとってのテスト by Takuto Wada
私にとってのテスト私にとってのテスト
私にとってのテスト
Takuto Wada16.8K views
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版) by Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada70.6K views
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 by Takuto Wada
SQLアンチパターン - 開発者を待ち受ける25の落とし穴SQLアンチパターン - 開発者を待ち受ける25の落とし穴
SQLアンチパターン - 開発者を待ち受ける25の落とし穴
Takuto Wada17.2K views
愛せないコードを書くには人生はあまりにも短い by Takuto Wada
愛せないコードを書くには人生はあまりにも短い愛せないコードを書くには人生はあまりにも短い
愛せないコードを書くには人生はあまりにも短い
Takuto Wada26.6K views
ペアプログラミング ホントのところ by Takuto Wada
ペアプログラミング ホントのところペアプログラミング ホントのところ
ペアプログラミング ホントのところ
Takuto Wada38.4K views
RESTful Web アプリの設計レビューの話 by Takuto Wada
RESTful Web アプリの設計レビューの話RESTful Web アプリの設計レビューの話
RESTful Web アプリの設計レビューの話
Takuto Wada72.2K views
例外設計における大罪 by Takuto Wada
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada68.5K views

Recently uploaded

SNMPセキュリティ超入門 by
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門mkoda
301 views15 slides
Web3 Career_クレデン資料 .pdf by
Web3 Career_クレデン資料 .pdfWeb3 Career_クレデン資料 .pdf
Web3 Career_クレデン資料 .pdfnanamatsuo
16 views9 slides
定例会スライド_キャチs 公開用.pdf by
定例会スライド_キャチs 公開用.pdf定例会スライド_キャチs 公開用.pdf
定例会スライド_キャチs 公開用.pdfKeio Robotics Association
97 views64 slides
JJUG CCC.pptx by
JJUG CCC.pptxJJUG CCC.pptx
JJUG CCC.pptxKanta Sasaki
6 views14 slides
Windows 11 information that can be used at the development site by
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development siteAtomu Hidaka
80 views41 slides
SSH応用編_20231129.pdf by
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdficebreaker4
287 views13 slides

Recently uploaded(11)

SNMPセキュリティ超入門 by mkoda
SNMPセキュリティ超入門SNMPセキュリティ超入門
SNMPセキュリティ超入門
mkoda301 views
Web3 Career_クレデン資料 .pdf by nanamatsuo
Web3 Career_クレデン資料 .pdfWeb3 Career_クレデン資料 .pdf
Web3 Career_クレデン資料 .pdf
nanamatsuo16 views
Windows 11 information that can be used at the development site by Atomu Hidaka
Windows 11 information that can be used at the development siteWindows 11 information that can be used at the development site
Windows 11 information that can be used at the development site
Atomu Hidaka80 views
SSH応用編_20231129.pdf by icebreaker4
SSH応用編_20231129.pdfSSH応用編_20231129.pdf
SSH応用編_20231129.pdf
icebreaker4287 views
さくらのひやおろし2023 by 法林浩之
さくらのひやおろし2023さくらのひやおろし2023
さくらのひやおろし2023
法林浩之94 views
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20... by NTT DATA Technology & Innovation
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料) by NTT DATA Technology & Innovation
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
The Things Stack説明資料 by The Things Industries by CRI Japan, Inc.
The Things Stack説明資料 by The Things IndustriesThe Things Stack説明資料 by The Things Industries
The Things Stack説明資料 by The Things Industries
CRI Japan, Inc.51 views

xUTP Chapter19 (2). Testcase Class

  • 2. Test Definition ● Test Method – Four-Phase Test ● Assertion Method – Assertion Message ● Testcase Class ● Test Execution ● Test Runner ● Testcase Object ● Test Suite Object ● Test Discovery ● Test Enumeration ● Test Selection
  • 4. Test Definition ● Test Method – Four-Phase Test ● Assertion Method – Assertion Message ● Testcase Class ● Test Execution ● Test Runner ● Testcase Object ● Test Suite Object ● Test Discovery ● Test Enumeration ● Test Selection
  • 5. Testcase Class ● テストコードをどこに書く? ● 関連する Test Method を単一の Testcase Class に 配置する ● Testcase Class は複数の Test Method の置き場所と なり、(実行時にそれらメソッドは) Testcase Object に なる ● How It Works ● Testcase Class は実行時に Test Suite Factory (p399) として働き、 Test Method 毎に Testcase Object を作成する ● Testcase Class は作成した Testcase Object を Test Suite Object (p387) に渡し、 Test Runner (p377) がまとめて実行する
  • 6. Why We Do This ● オブジェクト指向言語を使うとき、 Test Method を グローバル関数や手続きにするのではなく、 クラス に置きたい ● Test Method を Testcase Class のインスタンス メソッドにしておくことで、 Test Method 毎に Testcase Class をインスタンス化し、 Testcase Object を作成することができる ● この方法であれば、実行時に Test Method に手を入 れる (manipulate) ことができる ● もちろん Test Method 毎にクラスを作る手もある が、オーバーヘッドはあるし名前空間は荒れるしテ スト間の共通化、再利用は難しくなるしで良いこと がない
  • 7. Implementation Notes ● Testcase Class の魔法は実行時に現れる ● 詳しくは Testcase Object と Test Runner 参照 ● テストロジックを Test Method に書いてあとは Test Runner の魔法に任せれば良い ● Test Code Duplication (p213) は Extract Method して Test Utility Method にする ● 抽出したメソッドを… – (Abstract) Testcase Superclass (p638) に引き上げたり – Test Helper class (p643) にしたり – Test Helper Mixin (p638) にしたりできる
  • 8. Example: Testcase Class public class TestScheduleFlight extends TestCase { public void testUnscheduled_shouldEndUpInScheduled() throws Exception { Flight flight = FlightTestHelper.getAnonymousFlightInUnscheduledState(); flight.schedule(); assertTrue("isScheduled()", flight.isScheduled()); }     public void testScheduledState_shouldThrowInvalidRequestEx() throws Exception { Flight flight = FlightTestHelper.getAnonymousFlightInScheduledState(); try { flight.schedule(); fail("not allowed in scheduled state"); } catch (InvalidRequestException e) { assertEquals("InvalidRequestException.getRequest()", "schedule", e.getRequest()); assertTrue("isScheduled()", flight.isScheduled()); } } }
  • 9. Further Reading ● xUnit のいくつか(たとえば VbUnit や NUnit)で は、 Testcase Class は “test fixture” と呼ばれる ● xUTP の文脈で言うところの Test Fixture と混同して はならない ● Fit フレームワークも fixture という言葉をつかう ● Fit の fixture は Fit table の Adapter で、 Data- Driven Test の Interpreter として作用する
  • 11. Test Definition ● Test Method – Four-Phase Test ● Assertion Method – Assertion Message ● Testcase Class ● Test Execution ● Test Runner ● Testcase Object ● Test Suite Object ● Test Discovery ● Test Enumeration ● Test Selection
  • 12. Test Runner ● テストをどうやって実行する? ● Test Suite Object をインスタンス化し suite 内の Testcase Object 全てを実行するようなアプリ (Test Runner) を使う ● How It Works ● xUnit ファミリーには CUI や GUI からテストを実行して 結果をレポートさせる機能がある ● Test Runner はテストの Composite[GoF] を作るため に… – Test Enumeration (p399) – Test Discovery (p393) – Test Selection (p403) …などを使う
  • 13. How It Works (2) ● 走らせる Composite は以下のどれでも良い ● 単一の Testcase Object ● Test Suite Object ● Composite Test Suite (Suite of Suite) ● どれでも同じように走らせられるのは同じ interface を実装しているから ● Test Runner は実行に際して単一のテストを実行して いるのか複数のテストを実行しているのかを意識しなく て良い ● Test Runner はテスト実行、アサーション失敗、エ ラーや例外の数などをトラッキングしてレポートする
  • 14. Why We Do This ● test automator によってテスト実行の流儀が違う のは望ましくない。誰でも同じように実行できるのが 望ましい ● Test Runner を標準にすることで、他の人の書いた テストコードでも楽に実行できる ● 別の方法で同じテストを実行する手段も同時に提供で きる(★?)
  • 15. Implementation Notes ● 代表的な Test Runner は ● IDE に統合された GUI から使う Test Runner ● コマンドラインから走らせる Test Runner ● Standard Test Interface があるから Test Runner はどれでも実行できる ● 静的型付け言語の場合は Testcase Object や Test Suite Object が実装すべき interface を提供している – C# や新しめの Java では attribute や annotation で素のク ラスに test interface を織り込めるものがある ● 動的型付け言語の場合は明示的な test interface は 無いが、 duck-typing 的に解決する
  • 16. Implementation Notes (2) ● 代表的な test interface は… ● テストの数を答えるメソッド ● テストを実行するメソッド ● テストフレームワークが Test Enumeration をサポートする 場合には、 Testcase Class や suite class (★特定の仕組 みを継承しない AllTests などか★) は Test Suite Factory メソッド (たいがいは “suite” というメソッド) も実装しないと いけない ● Test Runner のバリエーション ● GUI ● コマンドライン ● File System Test Runner (指定ディレクトリ以下を探す) ● Test Tree Explorer (Eclipse の Test Tree とか)
  • 18. Test Definition ● Test Method – Four-Phase Test ● Assertion Method – Assertion Message ● Testcase Class ● Test Execution ● Test Runner ● Testcase Object ● Test Suite Object ● Test Discovery ● Test Enumeration ● Test Selection
  • 19. Testcase Object ● テストをどうやって実行する? ● Command[GoF] オブジェクトを各テスト (Test Method) 毎に作成し、 run メソッドを呼び出す ● この機能があるので、 GUI の Test Runner は Tree を クリックしてテストを一つ選択して実行とかできる ● How It Works ● 各テスト毎に Command オブジェクトをつくる – Testcase Class を Test Suite Factory として使い、 Testcase Object を保持する Test Suite Object を作る – Test Discovery または Test Enumeration を使って Testcase Object 群をつくる
  • 20. Why We Do This ● テストを手続きでなく first-class object として扱う ことで、いろいろな可能性が開ける ● オブジェクトであれば、 Test Runner や Test Automation Framework から操作(や介入)しやすい – コレクションとして持つこともでき (Test Suite Object) ,それ らをイテレートし、実行し… ● xUnit ファミリー (のほとんど) は Test Method 毎 に独立した Testcase Object のインスタンスを作 り、 Independent Test (p42) を実現する ● もちろん、例外はある (TestNG や NUnit) – Testcase Object のインスタンスを使いまわす
  • 21. Implementation Notes ● Testcase Object が標準的な interface を実装し ているので、 Test Runner はテストの中身を気に せずに実行できる ● これが Command [GoF] の威力! ● Test ● Test Method 毎にクラスを分けることもできるがオスス メしない – Test Utility Method の共有を妨げる ● どのテストを実行するかを指定する仕組みが必要 – Pluggable Behaviour [SBPP] がつかえる ● テスト名をテストクラスのコンストラクタに渡す