« InstantRails | メイン | ユースケース »

ユニットテスト / テスト駆動開発

クラスやモジュールごとに、メソッドをテストするプログラムを作成する。まずは、このテストプログラムから書くのが現在の開発スタイル。テストプログラムを書く時間が増えるが、けっして開発時間が倍になるわけではない。バグが減り、信頼性の高いプログラムができる上に、割と開発が早い。

実際に書いてみた。

hogefuga.rb ←本番プログラム
--------------------------
class HogeFuga
 def hoge(n)
  if n < 10
   x = 1 + n
   return x
  else
   return "abc"
  end
 end
 
 def fuga
  return "def"
 end
end
--------------------------

test_hogefuga.rb ←テストをするプログラム
--------------------------
require 'test/unit'
require 'hogefuga'

class Test_HogeFuga < Test::Unit::TestCase
 def test_hoge
  inst = HogeFuga.new
  assert_equal(2, inst.hoge(1))
  assert_equal(3, inst.hoge(2))
  assert_equal(4, inst.hoge(3))
  assert_equal(5, inst.hoge(4))
  assert_equal(10, inst.hoge(9))
  assert_equal("abc", inst.hoge(10))
 end
 
 def test_fuga
  inst = HogeFuga.new
  assert_equal("def", inst.fuga)
 end
end
--------------------------

実行結果


細かいバグがなくなりそうで、いいなーと思う。
「テストケースは正常ルートと運用上起きそうな異常ルートのみで充分」

○Mock class(モッククラス)
※Mockは「模造品」という意味

Mock class は、例えばDBへ書き込むメソッドがあるとして、テストで本番のDBへ書き込まれても困るので、テストDBに書き込むなり、代わりに何か他のものを返すなりする為に用意するクラス!?
Mock classを利用するときは、もちろん require 'モッククラス' とする。



トラックバック

このエントリーのトラックバックURL:
http://synth.jp/pg/mt-tb.cgi/24

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

カレンダー


2007年06月
Su Mo Tu We Th Fr Sa
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Map

About

2006年08月11日 15:58に投稿されたエントリーのページです。

ひとつ前の投稿は「InstantRails」です。

次の投稿は「ユースケース」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。