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

Testing Framework Intro

088b1b43ff5dd64aa0f000da9e9da777?s=47 wtnabe
October 19, 2013

Testing Framework Intro

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

088b1b43ff5dd64aa0f000da9e9da777?s=128

wtnabe

October 19, 2013
Tweet

Transcript

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

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

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

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

  5. まずは素朴に

  6. /** product */ function add(a, b) { return a +

    b; } /** test */ function test_add() { assert_equal(5, add(2, 3)); } test_add(); /** run */
  7. 登場⼈物 productコード testコード テストの実⾏コード

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

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

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

  11. 基本的な構成

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

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

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

  15. その他の構成要素 Test Runner ブラウザで, CLIで, IDEで, etc Reporter ( Formatter

    ) JUnit.xml, TAP, etc assertions 分離しているものもある Test Double
  16. ⼀部端折って全体の様⼦はこんな感じ

  17. 周辺プロダクト Stagehand_TestRunner (PHP), Karma (JavaScript) shoulda (Ruby), should.js, expect.js qunit-tap

    (JavaScript), rspec-extra- formatters Sinon.JS, RR (Ruby), Phake (PHP)
  18. モノによって 呼び名は変わるけど だいたいこんな感じ

  19. 記述形式や考え⽅

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

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

  22. class Foo { function add() { } } // ----

    class Foo_Test extends TestCase { function setUp() { } function test_add() { } }
  23. たいして変わらない

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

  25. BDDで書いてみる

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

  28. Test::Moreっぽく

  29. package Foo; sub add { } # ---- use Test::More;

    use Foo; is(5, Foo::add(2, 3)); # <- done_testing;
  30. とにかくシンプル 継承とかメソッドに名前が必要ない is, ok などめちゃくちゃ短い 語彙も少ない 「場合」が増えてくると⼯夫が必要

  31. Q & A

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

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

  34. おしまい