Ruby用単体テストフレームワーク - test-unit

test-unit

test-unitはRuby用のxUnit系の単体テストフレームワークです。Ruby 1.8まではRuby本体に標準添付されていましたが、Ruby 1.9からはminitestというフレームワークが標準添付されています。test-unitがRuby 1.8に標準添付されていた頃はほとんど機能拡張などがされず、RSpecなどより新しいテスティングフレームワークから見劣りするものになっていました。しかし、Ruby標準添付ではなく、1つのプロジェクトとして開発が進められるようになってからは活発に開発が進められています。Ruby本体のバージョンアップに関係なく新しいバージョンをリリースできるようになったことも開発が活発になった理由の1つです。Ruby標準添付の頃のtest-unitしか知らない人は、一度、最新のtest-unitを使ってみてはいかがでしょうか。とても使いやすくなっていることを実感できるはずです。

後方互換性

test-unitではなるべく後方互換性を維持したまま開発を進めているため、ほとんどの場合、Ruby 1.8に標準添付されていたtest-unitで動いたテストは最新のtest-unitでも動作します。しかし、100%ではありません。もし、完全にRuby 1.8に標準添付されていたバージョンを使用したい場合は、以下のようにtest-unit 1.2.3をインストールし、明示的にtest-unit 1.2.3を利用するようにしてください。

インストール:

% sudo gem install test-unit -v 1.2.3

使用法:

require "rubygems"
gem "test-unit", "1.2.3"
require "test/unit"

test-unit 1.2.3のリファレンスマニュアル

機能の分割

test-unitには外部ライブラリに依存している機能がいくつかあります。たとえば、テスト結果をGUIで表示する部分です。これらの部分は別のパッケージとしてリリースすることにし、標準的なコア機能はtest-unitパッケージとしてリリースしています。そのため、付加的な機能を利用する場合は明示的にtest-unitとは異なるパッケージをインストールする必要があります。

例えば、GTK+を用いたテスト実行インターフェイスを利用する場合は以下のようになります。

インストール:

% sudo gem install test-unit-runner-gtk2

使用法:

require "test/unit/runner/gtk2"

これにより--runner=gtk2オプションが利用できるようになります。--runner=gtk2オプションを指定することによりGTK+を用いたテスト実行インターフェイスを利用できるようになります。

test-unit関連パッケージは以下の通りです。

test-unit ビルド結果

xUnitベースのテスティングフレームワークのコア機能を提供します。Ruby 1.8に標準添付されていた頃と比べると以下のような機能が追加されています。

test-unitの最新リリース

2013-05-18にリリースされた2.5.5が最新リリースです。

test-unitのインストール

インストール:

% sudo gem install test-unit

使い方:

require "test-unit"

test-unitのドキュメント

test-unit-rails

Railsでtest-unitを使うためのライブラリです。モック機能などを使えるテストダブルライブラリRRと統合テスト用ライブラリCapybaraも一緒にセットアップするので、すぐに高機能なテスト環境を用意できます。

test-unit-railsの最新リリース

2012-07-05にリリースされた1.0.2が最新リリースです。

test-unit-railsのインストール

まず、Gemfileに以下のコードを追加してください。

group :development, :test do
  gem 'test-unit-rails'
end

次にgemをアップデートします。

% bundle update

test/test_helper.rbを以下のように変更したらインストールは完了です。

# require 'rails/test_helper'
require 'test/unit/rails/test_help'

test-unit-activesupport

ActiveSupportでtest-unitを使うためのライブラリです。ActiveSupport::TestCaseのバックエンドがminitestではなくtest-unitになります。

test-unit-activesupportの最新リリース

2012-07-20にリリースされた1.0.1が最新リリースです。

test-unit-activesupportのインストール

ActiveSupportを使う前にtest/unit/active_supportをrequireしてください。

require "test/unit/active_support"
require "active_support"

これでActiveSupport::TestCaseでtest-unitのすべての機能を使えるようになります。

require "test/unit/active_support"
# require "active_support" ...
class YourTest < ActiveSupport::TestCase
  # ...
end

test-unit-full

以下の拡張パッケージをまとめてインストールするためのメタパッケージです。

test-unit-fullの最新リリース

2011-02-09にリリースされた0.0.3が最新リリースです。

test-unit-fullのインストール

インストール:

% sudo gem install test-unit-full

使い方:

require "test/unit/full"

test-unit-notify

GNOME上での通知 Mac OS X上での通知
テストの実行結果をポップアップで通知します。通知方法は環境によって異なります。
GNOMEやXfceやKDEなどのX Window Systemベースの環境
notify-sendを使ってD-Bus経由でnotification-daemonにリクエストを送ることにより通知します。notify-sendコマンドが無かったり、notification-daemonが動いていない場合は利用できません。
Mac OS X
growlnotifyを使って通知します。growlnotifyコマンドが無かったり、Growlが動いていない場合は利用できません。
Windows
どうやるのがいいのでしょうか。Growl for Windows?(未実装)

test-unit-notifyの最新リリース

2013-04-02にリリースされた1.0.1が最新リリースです。

test-unit-notifyのインストール

インストール:

% sudo gem install test-unit-notify

使い方:

require "test/unit/notify"

--notifyオプションが追加されます。--notifyオプションを指定するとテスト終了時にテスト結果をポップアップで通知します。

test-unit-notifyのドキュメント

test-unit-rr

test-unitでテストダブル(テスト代役)ライブラリRRを利用するためのパッケージです。

test-unit-rrの最新リリース

2013-07-07にリリースされた1.0.3が最新リリースです。

test-unit-rrのインストール

インストール:

% sudo gem install test-unit-rr

使い方:

require "test/unit/rr"

test-unit-rrのドキュメント

test-unit-capybara

Rackアプリケーションの統合テストを簡単に行うためのライブラリであるCapybaraをtest-unitで利用するためのパッケージです。

test-unit-capybaraの最新リリース

2013-05-15にリリースされた1.0.4が最新リリースです。

test-unit-capybaraのインストール

インストール:

% sudo gem install test-unit-capybara

使い方:

require 'test/unit/capybara'

class MyRackApplication
  def call(env)
    html = <<-HTML
<html>
  <head>
    <title>Welcome! - my site</title>
  </head>
  <body>
    <h1>Welcome!</h1>
    <div class="header">
      <p>No navigation.</p>
    </div>
  </body>
</html>
HTML
   [200, {"Content-Type" => "text/html"}, [html]]
  end
end

class TestMyRackApplication < Test::Unit::TestCase
  include Capybara::DSL

  def setup
    Capybara.app = MyRackApplication.new
  end

  def test_title
    visit("/")
    within("h1") do
      assert_equal("Welcome!", text)
    end
  end

  def test_no_sidebar
    visit("/")
    within("body") do
      assert_not_find(".sidebar")
    end
  end

  def test_header_content
    visit("/")
    within(".header") do
      find("ol.navi")
      # これは失敗して以下のエラーメッセージを出力します。
      #
      # <"ol.navi">(:css) expected to find a element in
      # <<div class="header">
      #       <p>No navigation.</p>
      #     </div>>
      #
      # このメッセージでは現在のコンテキストを示しています。HTML全体ではなく
      # 必要な部分のみを見ることができます。このコンテキストは"within"で選択
      # したコンテキストです。この機能によりsave_and_open_pageなしでも問題を
      # デバッグできるようになります。
    end
  end
end

test-unit-capybaraのドキュメント

test-unit-runner-tap

TAP、TAP-Y、TAP-J形式でテスト結果を出力できます。

test-unit-runner-tapの最新リリース

2012-02-06にリリースされた1.0.0が最新リリースです。

test-unit-runner-tapのインストール

インストール:

% sudo gem install test-unit-runner-tap

使い方:

require "test/unit/runner/tap"

--runner=tap、--runner=tapy、--runner=tapjオプションが追加されます。これらのオプションを指定するとTAP、TAP-Y、TAP-J形式でテスト結果を出力します。

test-unit-runner-gtk2

GTK+を用いて実装されたGUIのテスト実行機能です。

test-unit-runner-gtk2の最新リリース

2011-02-09にリリースされた0.0.2が最新リリースです。

test-unit-runner-gtk2のインストール

インストール:

% sudo gem install test-unit-runner-gtk2

使い方:

require "test/unit/runner/gtk2"

--runner=gtk2オプションが追加されます。--runner=gtk2オプションを指定するとGTK+ベースのUIでテストを実行します。

test-unit-runner-tk

Tkを用いて実装されたGUIのテスト実行機能です。

test-unit-runner-tkの最新リリース

2008-06-17にリリースされた0.0.1が最新リリースです。

test-unit-runner-tkのインストール

インストール:

% sudo gem install test-unit-runner-tk

使い方:

require "test/unit/runner/tk"

--runner=tkオプションが追加されます。--runner=tkオプションを指定するとTkベースのUIでテストを実行します。

test-unit-runner-fox

FOX Toolkitを用いて実装されたGUIのテスト実行機能です。

test-unit-runner-foxの最新リリース

2008-06-17にリリースされた0.0.1が最新リリースです。

test-unit-runner-foxのインストール

インストール:

% sudo gem install test-unit-runner-fox

使い方:

require "test/unit/runner/fox"

--runner=foxオプションが追加されます。--runner=foxオプションを指定するとFOX ToolkitベースのUIでテストを実行します。

開発者向け情報

test-unitはRubyでもっと便利なテスト環境を提供するため、開発に参加してくれる人を募集しています。 以下は開発に必要となる情報です。

リポジトリ

GitHub上のgitリポジトリを利用しています。ソースコードは以下のように取得できます。

test-unit
% git clone https://github.com/test-unit/test-unit.git
test-unit-rails
% git clone https://github.com/test-unit/test-unit-rails.git
test-unit-activesupport
% git clone https://github.com/test-unit/test-unit-activesupport.git
test-unit-full
% git clone https://github.com/test-unit/test-unit-full.git
test-unit-notify
% git clone https://github.com/test-unit/test-unit-notify.git
test-unit-rr
% git clone https://github.com/test-unit/test-unit-rr.git
test-unit-capybara
% git clone https://github.com/test-unit/test-unit-capybara.git
test-unit-runner-gtk2
% git clone https://github.com/test-unit/test-unit-runner-gtk2.git
test-unit-runner-tk
% git clone https://github.com/test-unit/test-unit-runner-tk.git
test-unit-runner-fox
% git clone https://github.com/test-unit/test-unit-runner-fox.git