9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

assert_equal関数を作成する

Last updated at Posted at 2020-12-03

目次

このページではassert equalというequalかどうかを確かめる関数を以下の順をおって説明する.

assert_equalの基本部分を作成

assert equalの基本的な動作をする関数を作成してみる.

引数として確認するもの(expected)と結果(result)を与え,関数内でそれらが等しいかどうかを確認する.以下はその内容.

assert_equal.rb
def assert_equal(expected, result)
    return expected == result
end

これで引数が等しければtrue,そうでなければfalseを返すことができるようになった.

目次へ

色を付ける

次に先程の関数の出力に着色できるようにして,見やすくしてみる.

そのために colorize というものを使用する.

assert_equal.rb
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.rb
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の値をそのまま出力
  • どうなったかを記述
assert_equal_ro.rb
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.

となった.

目次へ

重複箇所を整理

先程のコードでは重複している部分があるのでそれを別の関数に移しておく.

assert_equal_ro2.rb
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
9
0
1

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
9
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?