mustメソッドで読みやすいテスト

はてなブックマークに追加はてなブックマーク Yahoo!ブックマークに登録 ニフティクリップに追加 Livedoor クリップに追加 BuzzurlにブックマークBuzzurlにブックマーク Twitterに投稿  

=追記(2010/07/23)
Rubyベストプラクティスのひとり読書。理解が難しかった部分を中心にまとめています。
書籍から引用しすぎと思われたページ、理解したページなどを削除して、当初より公開ページを減らしました。すいません。
読書のまとめ記事は難しいと感じたので、今後はブログで読書のまとめは書かないでおきます。差し障りがあれば現存するページも削除致しますので予めご了承下さい。
=追記ここまで


http://github.com/sandal/rbp/blob/master/testing/test_unit_extensions.rb
からtest_unit_extensions.rbを取ってきてmustメソッドが使えるようにしておく。


9ページあたりのコードを修正加筆

require "rubygems"
require "prawn"
require "test/unit"
require "test_unit_extensions"
 
class Prawn::Document
  module Text
    module StyleParser
      extend self   # module_function :hoge の代わりにこう書いてもOK
 
      TAG_PATTERN = %r{(</?[ib]>)}
 
      def process(text)
        text.split( TAG_PATTERN ).delete_if{|x| x.empty?}
      end
 
      def style_tag?(text)
        text =~ TAG_PATTERN
      end
    end
  end
end
 
class TestInlineStyleParsing < Test::Unit::TestCase
 
  def setup
    @parser = Prawn::Document::Text::StyleParser
  end
 
  must "parse italic tags" do
    assert_equal ["Hello ", "<i>", "Fine", "</i>", " World"],
      @parser.process("Hello <i>Fine</i> World")
  end
 
  must "parse bold tags" do
    assert_equal ["Some very ", "<b>", "bold text", "</b>"],
      @parser.process("Some very <b>bold text</b>")
  end
 
  must "parse mixed italic and bold tags" do
    assert_equal ["Hello ", "<i>", "Fine ", "<b>", "World", "</b>", "</i>"],
      @parser.process("Hello <i>Fine <b>World</b></i>")
  end
 
  must "not split out ohter tags than <i>, <b>, </i>, </b>" do
    assert_equal ["Hello <indigo>Ch", "</b>", "arl", "</b>", "ie</indigo>"],
      @parser.process("Hello <indigo>Ch</b>arl</b>ie</indigo>")
  end
 
  must "be able to check whether a string needs to be parsed" do
    assert @parser.style_tag?("Hello <i>Fine</i> World")
    assert !@parser.style_tag?("Hello World")
  end
 
end

実行結果

>ruby 9.rb
Loaded suite 9
Started
.....
Finished in 0.0 seconds.
 
5 tests, 6 assertions, 0 failures, 0 errors


テスティングの基礎

1つのテストケースで、すべてのエッジケースをカバーしようとしない。
テストケースを分割することで見通しが良くなり、かつ全てのケースが同時にテストされる。
前処理setupメソッド、後処理teardownメソッド。
例外テストには、assert_raises(), assert_nothing_raised()メソッドを使う。適切なエラークラス名を引数にする。
Rakeでテストを自動化し(Rakefileを作り)、テストケース全体を同時に実行する。


日時: 2010年06月18日 12:57
コメントを投稿






トラックバック

■この記事のトラックバックURL:
http://www.mapee.jp/mpe334/mt-tb.cgi/526

この記事にトラックバックされる方は、参照先が分かるようにするために、「mustメソッドで読みやすいテスト」へのリンクをお願いいたします。
以下のHTMLタグをトラックバック送信元ページ内に挿入して下さい。



※この記事へのリンクがない、また関連のないページからのトラックバックは反映されませんので、ご了承下さい。






あわせて読みたいブログパーツ
フィードメーター - Ruby勉強ルーム