3
0

More than 3 years have passed since last update.

part4 assert_equal

Posted at

テスト駆動開発

今回は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.

これから次のフィボナッチ数列に活かしていこう

参考文献

チャート式ruby-Ⅳ


  • source ~/my_ruby/grad_members_20f/members/majesty99/for_post/ruby4.org
3
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0