テスト駆動開発
今回はassert_equalについて、テスト駆動開発の根本になるもである。
equal
まずはequalかどうかを調べる関数を関係演算子とか知らないんですがという人は
part3 if構文
を見てください。まずは
p 1==1
をassert_equal.rbに打ち込んで、
$ruby assert_equal.rb
true
dehaこれをmethodにしてみよう。
methodの書式を思いだそう
def メソッド名(引数1,引数2,...)
実行するコマンド
実行するコマンド
end
これにp 1==1にように定義していこう
def assert_equal(expected, result)
return expected == result
end
p assert_equal(1,1)
p assert_equal(2,1)
just a moment.
なんだreturnって
メソッドでは戻り値をメソッド呼び出し元に返せる。この場合、returnの次に記述されている"expected == result"の結果がメソッドの戻り値となる。
さて、true,falseと帰ってきたでしょうか?
Colorize
ナニソレ
文字に色をつけて、見やすくしようという考えです。先程のものに追加してみよう。
require 'colorize'
def assert_equal(expected, result)
if expected == result
puts 'true'.green
else
puts 'false'.red
end
end
p assert_equal(1,1)
p assert_equal(2,1)
$ruby assrt_equal.rb
true
false
んー、ソースコードに個別に任意の色をつける方法はやはり見つからない…誰か知っているお方いませんかね…実際なら
true
false
のようになっているはずです。
richer Output
richerというのはわかりやすく出力するということなのでしょうか。やってみよう
目標は
true:print"succeeded in assert_equal.\n".green
false:print"failed in assert_equal.\n".red
のように出力するということ
条件分岐ならif文ですよね
true表記でなくsucceeded…表記にするんだから..
if expected == result
....
print "succeeded in assert equal.\n".green
else
...
print "failed in assert_equal.\n".red
end
であると
ではわかりやすく出力するために.
require 'colorize'
def assert_equal(expected, result)
if expected == result
print "succeeded in assert_equal.\n".red
puts "{expected, result} ={#{expected}, #{result}}"
else
print "failed in assert_equal.\n".green
puts "{expected, result} ={#{expected}, #{result}}"
else
end
end
p assert_equal(1,1)
p assert_equal(2,1)
で、実行結果は
$ ruby assert_equal.rb
succeeded in assert_equal.
{expected,result} = {1,1}
failed in assert_equal.
{expected,result} = {2,1}
assert not equal
簡潔に言うと出力を逆にするという話
ちなみにpart3の方に書いたとおり"!="で等しくない時に真というのは書いてます。
require 'colorize'
def assert_not_equal(expected, result)
if expected != result
print "failed in assert_equal.\n".red
puts "{expected, result} ={#{expected}, #{result}}"
else
print "succeeded in assert_equal.\n".green
puts "{expected, result} ={#{expected}, #{result}}"
else
end
end
p assert_equal(1,1)
p assert_equal(2,1)
実行結果は以下のように
$ ruby assert_equal.rb
failed in assert_not_equal.
{expected,result} = {1,1}
succeedeed in assert_equal.
{expected,result} = {2,1}
整理へ
結果自体は良くなっているが、これを繰り替えし使用するものと考えると簡潔なプログラムにする必要がある。
上記ではputsの行が二回書かれているこれを、メソッドにして、簡潔にしてみよう
require 'colorize'
def puts_num(expected, result)
puts "{expected, result} ={#{expected}, #{result}}"
end
def assert_equal(expected, result)
puts_num(expected, result)
if expected == result
print "succeeded in assert_equal.\n".red
else
print "failed in assert_equal.\n".green
end
end
assert_equal(1,1)
assert_equal(2,1)
実行結果はこうなる.
$ruby assert_equal.rb
{expected,result} = {1,1}
failed in assert_not_equal.
{expected,result} = {2,1}
succeedeed in assert_equal.
これから次のフィボナッチ数列に活かしていこう
参考文献
- source ~/my_ruby/grad_members_20f/members/majesty99/for_post/ruby4.org