【アルゴリズム+Ruby】Rubyで単体テスト 【test-unit】
備忘録。
バイナリサーチをRubyで実装しつつ単体テストを行ってみました。
使用したテストフレームワークはとりあえずtest-unitで。。。
テストケースは、
・通常の探索でヒットする場合
・通常の探索でヒットしない場合
・数字じゃないオブジェクトを与えた場合(例外テスト)
です。
とりあえずてきとーです。
require 'test/unit' class Searcher def self.binary_search( x , left , right , array ) while left <= right do mid = (left + right) / 2 if array[mid] == x then return mid end if array[mid] < x then left = mid + 1 else right = mid - 1 end end return nil end end class SearchTest < Test::Unit::TestCase @@array = [1,2,3,4,5,6,6,8,9,10] def testHitSearch ans = Searcher.binary_search( 9 , 0 , @@array.length-1 , @@array) assert_equal(8,ans) end def testMissSearch ans = Searcher.binary_search( 34 , 0 ,@@array.length-1 , @@array) assert_equal(nil,ans) end def testillegalArgument begin Searcher.binary_search( "String" , 0 ,@@array.length-1 , @@array) flunk('Failed') rescue end end end
実行結果
Run options: # Running tests: Finished tests in 0.004678s, 641.2997 tests/s, 427.5331 assertions/s. 3 tests, 2 assertions, 0 failures, 0 errors, 0 skips ruby -v: ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
おー、、、、
、、、、、はい。
ちゃんとすべてのテストが通りました。
今回はクラス変数、クラスメソッド、Javaでいうtry-catchにあたるbegin構文なんかもついでにおぼえました(。・・。)
明日もがんばります。