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

おしまい