Rubyのテストについてのメモ

  • ファイルやディレクトリ操作がからむテストでは、必要なファイルやディレクトリはなるべくテストのときに作成する。環境に影響を与えないようする(すでに存在しているファイルの変更や消去を避ける手立て。作ったファイルの後片付け)。あらかじめ用意したファイルを使う場合はファイルパスの指定に気をつける(カレントディレクトリと相対パスの対応など)。
  • 浮動小数点数の比較は相対誤差で判定する。
require 'fileutils'
require 'minitest/unit'
require 'tmpdir'
MiniTest::Unit.autorun

class TestFileutils < MiniTest::Unit::TestCase
  def setup
    @ori_dir = Dir.pwd
    @sandbox = Dir.mktmpdir
    Dir.chdir @sandbox
  end
  def test_cp_r_preserve
    FileUtils.mkdir("tmp_src")
    FileUtils.touch("tmp_src/a")
    File::utime(Time.local(2000, 1, 1, 22, 0, 0),
                Time.local(2000, 1, 1, 22, 0, 0), "tmp_src")
    FileUtils.cp_r("tmp_src", "tmp_dest", :preserve => true)
    assert_equal(File.stat("tmp_src").mtime, File::stat("tmp_dest").mtime)
  end

  def teardown
    Dir.chdir @ori_dir
    FileUtils.rm_r @sandbox
  end
end

class TestMiniTest < MiniTest::Unit::TestCase
  def test_assert_in_epsilon
    assert_in_epsilon -1.001, -1.0
  end
end

(追記: バグは修正されていた
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/fileutils.rb?r1=39011&r2=39015
http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/minitest/unit.rb?r1=33815&r2=35541)