読者です 読者をやめる 読者になる 読者になる

RubyのUnitテスト系フレームワーク用のテストファイル名のパターンには test/test*.rb を使うのが良さそう

Rake::TestTask

Rake::TestTask がデフォルトでこのパターンなので、これに則っておくことで設定を省略できて良さそう。今まで雰囲気で従っていた慣習に納得の行く理由が新しく発見できて良かった。「RubyのUnitテスト系フレームワーク」と呼んだけれど、正確には「Rubyスクリプトとしてテストを実行するようなインターフェースを提供しているテストフレームワーク」と呼んだ方が良いかもしれない。

https://github.com/ruby/rake/blob/af15762f972a3f8322a9b5904d56fe2ff3dd8352/lib/rake/testtask.rb

例えば PetitestRake::TestTask を使って rake test で全てのテストが実行されるようにするには、例えば Rakefile に以下のような定義を行う。

require "rake/testtask"
Rake::TestTask.new

実行する。

rake test

標準出力の出力結果。

TestRunner
  #test_description
  #test_full_description
TestSimple
  #test_one_plus_one_to_be_two
TestTest
  #test_assertion_with_truthy_block_to_pass
  #test_assertion_with_truthy_value_to_pass


Counts:

  5 tests
  5 passes
  0 failures
  0 skips

Times:

  Started:  2017-03-26T15:02:46.401250+09:00
  Finished: 2017-03-26T15:02:46.404074+09:00
  Total:    0.002824s

テストのファイルパスとクラス名

RSpec is a testing DSL, Minitest is Ruby (seattlerb/minitestより) という言葉があるように 、こういうテスト用途で定義されるクラスも定数としてグローバルに参照できるように定義される訳なので、テストファイルも Ruby の他のプログラムと変わらないよという世界観の上では、当然クラス名の命名規則も普段 Ruby でコードを書くときと同じように統一しておくほうが良いと思う。上例では、以下のようなパターンの対応関係でテストのファイルパスとクラス名を割り当てることにしている。

  • test/test_runner.rb -> ::TestRunner
  • test/test_simple.rb -> ::TestTest
  • test/test_test.rb -> ::TestTest