Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Testing Framework Intro

wtnabe
October 19, 2013

Testing Framework Intro

Kanazawa.rb meetup #14のミニコーナー「Test ! Test !! Test !!!」に用意した、テスティングフレームワークざっくり話。使うと何が嬉しいのか、だいたいどういう感じの作りなのか、どんな種類のものがあるのかをだだっと並べてみました。

wtnabe

October 19, 2013
Tweet

More Decks by wtnabe

Other Decks in Programming

Transcript

  1. テスティング
    フレームワーク
    ざっくり
    @wtnabe
    Kanazawa.rb meetup #14
    2013-10-19 (Sat) at DMM.com Labo Kanazawa

    View Slide

  2. お品書き
    テストコードによるテスト
    基本的な構成
    その他の構成要素
    記述形式や考え⽅

    View Slide

  3. 前提
    とりあえずユニットテストで
    ⾃動化のメリットみたいな話はしません
    テストの⾃動化全般の話もしません

    View Slide

  4. テストコードによるテスト

    View Slide

  5. まずは素朴に

    View Slide

  6. /** product */
    function add(a, b) {
    return a + b;
    }
    /** test */
    function test_add() {
    assert_equal(5, add(2, 3));
    }
    test_add(); /** run */

    View Slide

  7. 登場⼈物
    productコード
    testコード
    テストの実⾏コード

    View Slide

  8. まさか混ぜておけない

    View Slide

  9. 課題
    どうやって分離する?
    どうやって実⾏する?
    どうやって判定する?
    どうやって集計する?

    View Slide

  10. これらを解決するのが
    テストハーネス、
    フレームワークと
    呼ばれるものです

    View Slide

  11. 基本的な構成

    View Slide

  12. とりあえずこんな感じ

    View Slide

  13. xUnitの場合
    TestCase
    テストコードを実際に書く
    TestSuite
    TestCaseのコレクション
    TestResult
    結果をまとめる
    cf. Testing Framework

    View Slide

  14. TestCase
    クラスベースOOの場合、TestCaseを継承して普通にclassを書く

    View Slide

  15. その他の構成要素
    Test Runner
    ブラウザで, CLIで, IDEで, etc
    Reporter ( Formatter )
    JUnit.xml, TAP, etc
    assertions
    分離しているものもある
    Test Double

    View Slide

  16. ⼀部端折って全体の様⼦はこんな感じ

    View Slide

  17. 周辺プロダクト
    Stagehand_TestRunner (PHP), Karma
    (JavaScript)
    shoulda (Ruby), should.js, expect.js
    qunit-tap (JavaScript), rspec-extra-
    formatters
    Sinon.JS, RR (Ruby), Phake (PHP)

    View Slide

  18. モノによって
    呼び名は変わるけど
    だいたいこんな感じ

    View Slide

  19. 記述形式や考え⽅

    View Slide

  20. ざっくり分類
    xUnit
    BDD
    PerlのTest::Moreみたいなやつ
    ほか

    View Slide

  21. さっきのを
    xUnitっぽく書いてみる

    View Slide

  22. class Foo {
    function add() {
    }
    }
    // ----
    class Foo_Test extends TestCase {
    function setUp() {
    }
    function test_add() {
    }
    }

    View Slide

  23. たいして変わらない

    View Slide

  24. xUnitのメリットは
    書き⽅、考え⽅に
    違和感が少ないこと

    View Slide

  25. BDDで書いてみる

    View Slide

  26. class Foo
    def add(a, b)
    end
    end
    # ----
    describe Foo do
    before { }
    describe '#add' do
    context 'given 2 and 3' do
    it { }
    end
    end
    end

    View Slide

  27. BDDは語彙が違う
    example, specを書く
    そのための⾔葉を使う
    素朴な「クラス - メソッド」の書き⽅よ
    り柔軟で記述量を減らせる場合も

    View Slide

  28. Test::Moreっぽく

    View Slide

  29. package Foo;
    sub add {
    }
    # ----
    use Test::More;
    use Foo;
    is(5, Foo::add(2, 3)); # <-
    done_testing;

    View Slide

  30. とにかくシンプル
    継承とかメソッドに名前が必要ない
    is, ok などめちゃくちゃ短い
    語彙も少ない
    「場合」が増えてくると⼯夫が必要

    View Slide

  31. Q & A

    View Slide

  32. Q. どれ使えばいいの?

    View Slide

  33. A. そのプラットフォーム
    で使ってる⼈が多いやつに
    しときましょう

    View Slide

  34. おしまい

    View Slide