目次
このページではassert equalというequalかどうかを確かめる関数を以下の順をおって説明する.
assert_equalの基本部分を作成
assert equalの基本的な動作をする関数を作成してみる.
引数として確認するもの(expected)と結果(result)を与え,関数内でそれらが等しいかどうかを確認する.以下はその内容.
def assert_equal(expected, result)
return expected == result
end
これで引数が等しければtrue,そうでなければfalseを返すことができるようになった.
色を付ける
次に先程の関数の出力に着色できるようにして,見やすくしてみる.
そのために colorize というものを使用する.
require 'colorize'
def assert_equal(expected, result)
if expected == result
puts 'true'.green
else
puts 'false'.red
end
end
assert_equal(1, 1)
これを実行すると緑色でtrueと表示される.
もしcolorizeがないと怒られたら
$ gem install colorize
でinstallする.
この関数で
assert_equal(1, 2)
とすると,赤色でfalseと表示される.
ちなみに,
$ irb
irb(main):001:0> require 'colorize'
=> true
irb(main):002:0> String.colors
=> [:black, :light_black, :red, :light_red, :green, :light_green, :yellow, :light_yellow, :blue, :light_blue, :magenta, :light_magenta, :cyan, :light_cyan, :white, :light_white, :default]
で,何色にcolorizeできるかが分かる.
出力をrichにする
もう少し出力をrichにする.
- 引数でとってきた,expected, resultの値をそのまま出力
- どうなったかを記述
require 'colorize'
def assert_equal(expected, result)
if expected == result
puts "expected :: #{expected}"
puts "result :: #{result}"
print "succeeded in #{__method__}.\n".green
else
puts "expected :: #{expected}"
puts "result :: #{result}"
print "failed in #{__method__}.\n".red
end
end
assert_equal(1,1)
assert_equal(1,2)
$ ruby assert_equal_ro.rb
expected :: 1
result :: 1
succeeded in assert_equal.
expected :: 1
result :: 2
failed in assert_equal.
となった.
重複箇所を整理
先程のコードでは重複している部分があるのでそれを別の関数に移しておく.
require 'colorize'
def puts_value(expected, result)
puts "expected :: #{expected}"
puts "result :: #{result}"
end
def assert_equal(expected, result)
puts_value(expected, result)
if expected == result
print "succeeded in #{__method__}.\n".green
else
print "failed in #{__method__}.\n".red
end
end
assert_equal(1,1)
assert_equal(1,2)
重複実行の予防
このコードは今後繰り返し使用するようなので,そのための準備をしておく.
colorizeと同じようにrequireで呼び出す.同じdirectoryにコピーして使用する.
たとえば,
require './assert_equal'
assert_equal(2, 1*2)
assert_not_equal('bob', 'bob2')
というように使う.
しかし,先程のコードには関数を実行する部分があるのでそれを回避したい.そこで使えるのが以下の構文だ.
if $PROGRAM_NAME == __FILE__
assert_equal(1, 1)
assert_equal(1, 2)
assert_not_equal(1, 2)
assert_not_equal(1, 1)
end
これを書いておくことで別ファイルから呼び出した時にifの中が実行されなくなる.
まとめ
assert_equal関数を作成した.
参考
- source ~/prog/github/grad_members_20f/members/miyanagi/post/assert.org