×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
テスティング フレームワーク ざっくり @wtnabe Kanazawa.rb meetup #14 2013-10-19 (Sat) at DMM.com Labo Kanazawa
Slide 2
Slide 2 text
お品書き テストコードによるテスト 基本的な構成 その他の構成要素 記述形式や考え⽅
Slide 3
Slide 3 text
前提 とりあえずユニットテストで ⾃動化のメリットみたいな話はしません テストの⾃動化全般の話もしません
Slide 4
Slide 4 text
テストコードによるテスト
Slide 5
Slide 5 text
まずは素朴に
Slide 6
Slide 6 text
/** product */ function add(a, b) { return a + b; } /** test */ function test_add() { assert_equal(5, add(2, 3)); } test_add(); /** run */
Slide 7
Slide 7 text
登場⼈物 productコード testコード テストの実⾏コード
Slide 8
Slide 8 text
まさか混ぜておけない
Slide 9
Slide 9 text
課題 どうやって分離する? どうやって実⾏する? どうやって判定する? どうやって集計する?
Slide 10
Slide 10 text
これらを解決するのが テストハーネス、 フレームワークと 呼ばれるものです
Slide 11
Slide 11 text
基本的な構成
Slide 12
Slide 12 text
とりあえずこんな感じ
Slide 13
Slide 13 text
xUnitの場合 TestCase テストコードを実際に書く TestSuite TestCaseのコレクション TestResult 結果をまとめる cf. Testing Framework
Slide 14
Slide 14 text
TestCase クラスベースOOの場合、TestCaseを継承して普通にclassを書く
Slide 15
Slide 15 text
その他の構成要素 Test Runner ブラウザで, CLIで, IDEで, etc Reporter ( Formatter ) JUnit.xml, TAP, etc assertions 分離しているものもある Test Double
Slide 16
Slide 16 text
⼀部端折って全体の様⼦はこんな感じ
Slide 17
Slide 17 text
周辺プロダクト Stagehand_TestRunner (PHP), Karma (JavaScript) shoulda (Ruby), should.js, expect.js qunit-tap (JavaScript), rspec-extra- formatters Sinon.JS, RR (Ruby), Phake (PHP)
Slide 18
Slide 18 text
モノによって 呼び名は変わるけど だいたいこんな感じ
Slide 19
Slide 19 text
記述形式や考え⽅
Slide 20
Slide 20 text
ざっくり分類 xUnit BDD PerlのTest::Moreみたいなやつ ほか
Slide 21
Slide 21 text
さっきのを xUnitっぽく書いてみる
Slide 22
Slide 22 text
class Foo { function add() { } } // ---- class Foo_Test extends TestCase { function setUp() { } function test_add() { } }
Slide 23
Slide 23 text
たいして変わらない
Slide 24
Slide 24 text
xUnitのメリットは 書き⽅、考え⽅に 違和感が少ないこと
Slide 25
Slide 25 text
BDDで書いてみる
Slide 26
Slide 26 text
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
Slide 27
Slide 27 text
BDDは語彙が違う example, specを書く そのための⾔葉を使う 素朴な「クラス - メソッド」の書き⽅よ り柔軟で記述量を減らせる場合も
Slide 28
Slide 28 text
Test::Moreっぽく
Slide 29
Slide 29 text
package Foo; sub add { } # ---- use Test::More; use Foo; is(5, Foo::add(2, 3)); # <- done_testing;
Slide 30
Slide 30 text
とにかくシンプル 継承とかメソッドに名前が必要ない is, ok などめちゃくちゃ短い 語彙も少ない 「場合」が増えてくると⼯夫が必要
Slide 31
Slide 31 text
Q & A
Slide 32
Slide 32 text
Q. どれ使えばいいの?
Slide 33
Slide 33 text
A. そのプラットフォーム で使ってる⼈が多いやつに しときましょう
Slide 34
Slide 34 text
おしまい