Skip to content

Instantly share code, notes, and snippets.

@hiroyuki-sato
Last active March 17, 2017 12:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hiroyuki-sato/bbac29ae0411a34daa373fb3a846ac32 to your computer and use it in GitHub Desktop.
Save hiroyuki-sato/bbac29ae0411a34daa373fb3a846ac32 to your computer and use it in GitHub Desktop.
test-unitこと始め

English vesion

test-unitこと始め

Rubyで利用できるテスティングフレームワークには、rspecminitestなどがあります。 fluentdやrroongaでは様々な理由から、これらのテスティングフレームワークの代わりにtest-unit というテスティングフレームワークを利用しています。

この文章では、rspecminitestの代わりにtest-unitをとりあえず使ってみる方法を説明します。

gem雛形の作成

bundleを使ってgemの雛形を作ります。 bundleはテストパッケージとして、現在rspecminitestのみサポートしており、test-unitは指定できません。 test-unitに類似したminitestの雛形を利用して、test-unitの設定を行います。

bundle gem -t minitest example
Creating gem 'example'...
      create  example/Gemfile
      create  example/.gitignore
      create  example/lib/example.rb
      create  example/lib/example/version.rb
      create  example/example.gemspec
      create  example/Rakefile
      create  example/README.md
      create  example/bin/console
      create  example/bin/setup
      create  example/.travis.yml
      create  example/test/test_helper.rb
      create  example/test/example_test.rb
Initializing git repo in /private/tmp/example

生成されたファイルと変更するファイル

.
|-- Gemfile
|-- README.md
|-- Rakefile
|-- bin
|   |-- console
|   `-- setup
|-- example.gemspec # <-- 変更します。
|-- lib
|   |-- example
|   |   `-- version.rb
|   `-- example.rb
`-- test
    |-- example_test.rb # <-- 変更します。
    `-- test_helper.rb  # <-- 変更します。

gemspecの編集

gemspecファイルにtest-unitの設定を行います。

変更前

  spec.add_development_dependency "minitest", "~> 5.0"

変更後

  spec.add_development_dependency "test-unit", "~> 3.2.3"

test/test_helperの修正

変更前

$LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
require 'example' # <-- 作成したgemの名前になっています。

require 'minitest/autorun' # <-- ここを修正します。

変更後

LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
require 'example' # <-- 作成したgemの名前になっています。

require 'test/unit' # <-- test/unitに修正します。

Rakefileの確認

minitestが生成するRakefileをそのまま利用できます。

require "bundler/gem_tasks"
require "rake/testtask"

Rake::TestTask.new(:test) do |t|
  t.libs << "test"
  t.libs << "lib"
  t.test_files = FileList['test/**/*_test.rb']
end

task :default => :test

test/example_test.rbの編集

minitestはtest/xxx_test.rbというテスト用のサンプルファイルを作成します。

このファイルをtest-unit用に修正します。

変更前

require 'test_helper'

class ExampleTest < MiniTest # <-- ここを修正します。
  def test_that_it_has_a_version_number
    refute_nil ::Example::VERSION
  end

  def test_it_does_something_useful
    assert false
  end
end

変更後

require 'test_helper'

class ExampleTest < Test::Unit::TestCase # <-- 修正後
  def test_that_it_has_a_version_number
    refute_nil ::Example::VERSION
  end

  def test_it_does_something_useful
    assert false
  end
end

テスト

rake testを実行するとテストtestディレクトリ内のテストを行います。サンプルは二つのテストを行い一つのテストが失敗するようになっています。

rake test
Loaded suite /path/to/ruby/gems/2.3.0/gems/rake-12.0.0/lib/rake/rake_test_loader
Started
F
==============================================================================================================================
Failure: <false> is not true.
test_it_does_something_useful(ExampleTest)
/path/to/example/test/example_test.rb:9:in `test_it_does_something_useful'
      6:   end
      7:
      8:   def test_it_does_something_useful
  =>  9:     assert false
     10:   end
     11: end
==============================================================================================================================
.

Finished in 0.008124 seconds.
------------------------------------------------------------------------------------------------------------------------------
2 tests, 2 assertions, 1 failures, 0 errors, 0 pendings, 0 omissions, 0 notifications
50% passed
------------------------------------------------------------------------------------------------------------------------------
246.18 tests/s, 246.18 assertions/s
rake aborted!
Command failed with status (1)

Tasks: TOP => test
(See full trace by running task with --trace)

独自テストファイルの追加

minitestと同様にテスト用のファイルは次のルールにしたがって作成します。

  • ファイルはtestディレクトリ以下に作成する
  • ファイル名はxxx_test.rbという名前にする
  • testディレクトリ直下でなくても、test/subのようなサブディレクトリでも良い

test
|-- example_test.rb
|-- sub
|   `-- example2_test.rb
`-- test_helper.rb

test/sub/example2_test.rbの中身例

require 'test_helper'

module Sub
  class Example2Test < Test::Unit::TestCase
    def test_that_it_has_a_version_number
      refute_nil ::Example::VERSION
    end

    def test_it_does_something_useful
      assert false
    end
  end
end

test-unitについて、より詳しく知りたい方は

オフィシャルのドキュメントを読みましょう。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment