assert_equal
assert equalとはequalかどうかを確かめる(assert)関数
まずは簡単に1==1を試してみる.
assert_equal.rb に書き込んでいく
p 1==1
> ruby assert_equal.rb
true
と返ってくる
次はこれをmethodにする
def assert_equal(expected, result)
return expected == result
end
p assert_equal(1, 1)
> ruby assert_equal.rb
true
と返ってくる.
colorizeで色をつける
まず
> gem install colorize
で install する
それから先程のコードの先頭に require 'colorize' を加え, 下記のように書きかえる
require 'colorize'
def assert_equal(expected, result)
if expected == result
puts 'true'.green
else
puts 'false'.red
end
end
assert_equal(1, 1)
assert_equal(1, 2)
このプログラムを実行すると true が green に false が red になっている.
色は green, red 以外にも black, light_black, light_red, light_green, light_yellow, light_blue, magenta, light_magenta, cyan, light_cyan, white, light_whiteがある
richer output
出力を少しわかりやすくする.
- 引数の expected, resultの値をそのまま出力
- そして以下のように出力するようにする
- true の時は "succeeded in assert_equal"
- false の時は "failed in assert_equal"
require 'colorize'
def assert_equal(expected, result)
p ['expected', expected]
p ['result', result]
if expected == result
puts 'succeeded in assert_equal'.green
else
puts 'failed in assert_equal'.red
end
end
if $PROGRAM_NAME == __FILE__
assert_equal(1, 1)
assert_equal(1, 2)
end
> ruby assert_equal_richer_output.rb
[expected, 1]
[result, 1]
succeeded in assert_equal
[expected, 1]
[result, 2]
failed in assert_equal
と出力される.
拡張:assert_not_equal
関数 assert_not_equal を加える.
その後, 重複箇所の整理と重複実行の予防を考慮したコードが以下の通りである.
require 'colorize'
def puts_vals(expected, result)
puts "expected :: #{expected}"
puts "result :: #{result}"
end
def assert_not_equal(expected, result)
puts_vals(expected, result)
print expected != result ?
"succeeded in #{__method__}.\n".cyan :
"failed in #{__method__}.\n".magenta
end
def assert_equal(expected, result)
puts_vals(expected, result)
print case expected == result
when true ; "succeeded in #{__method__}.\n".cyan
when false ; "failed in #{__method__}.\n".magenta
end
end
if $PROGRAM_NAME == __FILE__
assert_equal(1, 1)
assert_equal(1, 2)
assert_not_equal(1, 2)
assert_not_equal(1, 1)
end
上のコードの
if $PROGRAM_NAME == __FILE__
assert_equal(1, 1)
assert_equal(1, 2)
assert_not_equal(1, 2)
assert_not_equal(1, 1)
end
の意味は,codeが書いてあるファイル名(FILE)が,動いているファイル名($PROGRAM_NAME)と一致したら中身を実行である.これはidiom (熟語) である.
参考ページ
- source ~/grad_members_20f/members/djj31370/c4_assert_equal.org