part4 assert_equal



# テスト駆動開発

今回はassert\_equalについて、テスト駆動開発の根本になるもである。


## equal

まずはequalかどうかを調べる関数を関係演算子とか知らないんですがという人は
[part3 if構文](https://qiita.com/majesty99/items/f45c1a1d6580e7c57ad6)
を見てください。まずは

    p 1==1

をassert\_equal.rbに打ち込んで、

    $ruby assert_equal.rb
    true



dehaこれをmethodにしてみよう。
methodの書式を思いだそう

    def メソッド名(引数1,引数2,...)
     実行するコマンド
     実行するコマンド
    end

これにp  1==1にように定義していこう

```ruby
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

ナニソレ
文字に色をつけて、見やすくしようという考えです。先程のものに追加してみよう。

```ruby
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

んー、ソースコードに個別に任意の色をつける方法はやはり見つからない&#x2026;誰か知っているお方いませんかね&#x2026;実際なら
<font color="Green">true</font>
<font color="Red">false</font>

のようになっているはずです。


## richer Output

richerというのはわかりやすく出力するということなのでしょうか。やってみよう
目標は
**true**:print"succeeded in assert\_equal.\n".green
**false**:print"failed in assert\_equal.\n".red
のように出力するということ
条件分岐ならif文ですよね
true表記でなくsucceeded&#x2026;表記にするんだから..

    if expected == result
      ....
      print "succeeded in assert equal.\n".green
    else
      ...
      print "failed in assert_equal.\n".red
    end

であると
ではわかりやすく出力するために.

```ruby
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の方に書いたとおり"!="で等しくない時に真というのは書いてます。

```ruby
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の行が二回書かれているこれを、メソッドにして、簡潔にしてみよう

```ruby
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-Ⅳ](https://qiita.com/daddygongon/items/f6cea87314ee26e130ea)



------
 - **source** ~/my_ruby/grad_members_20f/members/majesty99/for_post/ruby4.org