リファレンス Test::Unit

(2006.11.11更新。RubyUnit (RUNIT) から Test::Unit へ変更。)

(2017.2) Ruby 2.3.3 に添付の test-unit パッケージに対応。Ruby 2.3.3 には, test-unit 3.1.5 と minitest 5.8.5 がバンドルされている。

標準テストフレームワーク

[2021.5]

Ruby 3.0 の標準テストフレームワークは, test-unit と minitest です。両方とも gem として同梱されています。

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

minitest Webサイト; GitHub - seattlerb/minitest: minitest provides a complete suite of testing facilities supporting TDD, BDD, mocking, and benchmarking.

Minitest::Assertions モジュールのメソッドは, assert_not_... 系がすべて refute_... というメソッドのみになっている。Test::Unit モジュールのほうは, 互換性のため, refute_... と assert_not_... の両方がある。

ここでは, Test::Unit のリファレンス記事を作ってみた。

Module Test::Unit::Assertions

require 'test/unit/assertions'

各種アサーションのメソッドを定めるモジュール。

定数

UncaughtThrow

シングルトンメソッド

use_pp = boolean_value
pretty-printerを使うかどうか設定する。

インスタンスメソッド

下記のメソッドは、assert_*() の「*」がパスしたときは何も起こらない。テストに失敗したときは AssertionFailedError が発生する。

message = nil と message = "" が混ざってるのが、ちょっと気になる。

assert( [object,] message = nil, &block)
ブロックを渡すか, 第一引数に条件式を渡す。

ブロックを渡す場合、結果が nil or false で失敗。引数で渡す場合, object が真ならpass.

assert_block(message = "assert_block failed.") do ... end
blockの結果が真ならpass
assert_boolean( actual, message = nil )
actual が true または false のどちらかなら pass.
assert_empty( object, message = nil )
object.empty? が真であれば, pass.

逆は assert_not_empty

assert_equal(expected, actual, message = nil)
expected == actualが真ならpass。expectedの ==メソッドが使われる。

逆 (!=) は assert_not_equal

assert_in_delta( expected_float, actual_float, delta = 0.001, message = "" )
expected_float, actual_float, deltaは、実数(か to_fメソッドを持つ)でなければならない。deltaは非負でなければならない。(expected_float.to_f - actual_float.to_f).abs <= delta.to_f ならpass.

逆は assert_not_in_delta

assert_include(collection, object, message = nil)
collection.include?(object) が真であれば pass.

逆は assert_not_include

assert_instance_of( klass, object, message = "" )
klassがクラスではないときはエラー。object.instance_of?(klass) が真ならpass。klass そのものからのインスタンスである。

klass はクラスの配列でもよい。

逆は assert_not_instance_of

assert_kind_of( klass, object, message = "")
klassがモジュール(またはクラス)ではないときはエラー。object.kind_of?(klass) が真ならpass。klass かそのサブクラスのインスタンスである。is_a?() と同じ。

klass はモジュールまたはクラスの配列でもよい。

逆は assert_not_kind_of

assert_match( pattern, string, message = "")
pattern =~ string が真ならpass。patternが文字列の場合は、内部でRegexpオブジェクトに変換される。

逆 (!~) は assert_not_match

assert_no_match( regexp, string, message = "" )
非推奨. assert_not_match を使え.
assert_nil( object, message = "")
object.nil? が真ならpass

逆は assert_not_nil

assert_nothing_raised( [exception, ...] [, message]) do ... end
3つの結果のどれかになる。ブロックを実行し, 1) 例外が発生しなければpass. 2) exception, ... の例外が発生すればテストに失敗, 3) それ以外の例外が発生すればその例外があがる。

assert_raise の逆になっている。

assert_nothing_thrown(message = "") do ... end
ブロックを実行し、何も throw されなければpass.

このメソッドは, assert_throw の逆ではない. おしい。

assert_operator( object1, operator, object2, message = "")
operatorはシンボルか文字列 (to_strメソッドを持つ) でなければならない。object1.__send__(operator, object2) が真ならpass.

逆は assert_not_operator

assert_raise(exception [, ...] [, message]) do ... end
ブロックを実行して、exception, ... のいずれかの例外が発生したらpass.

逆は assert_nothing_raised (名前注意)

assert_raises(exception [, ...] [, message]) {...}
@deprecated (非推奨). assert_raise() を使用してください。
assert_raise_kind_of( exception [, ...] [, message] ) do ... end
ブロックを実行して, exception, ... のいずれか, またはそのサブクラスの例外が発生したらpass.
assert_respond_to( object, method, message = "")
methodはシンボルまたは文字列 (to_strメソッドを持つオブジェクト) でなければならない。object.respond_to?(method)が真であればpass.

逆は assert_not_respond_to

assert_same( expected, actual, message = "")
オブジェクトの同一性 (__id__ が同じ) を確認する。actual.equal?(expected) が真ならpass

逆は assert_not_same

assert_send(send_array, message = nil)
send_arrayは配列でなければならない。その値は、レシーバ, メソッド名 [, 引数...] となる。メソッド名はSymbol. send_array[0].send_array[1](send_array[2], ...) が真ならpass.
assert_send( [[1, 2], :member?, 1] )   # -> pass
assert_send( [[1, 2], :member?, 4] )   # -> fail

逆は assert_not_send

assert_throw(expected_symbol, message = "") do ... end
expected_symbolはシンボルでなければならない。expected_symbol がブロック内で throw されればpass.
assert_throw(:done) do   # -> pass
  throw(:done)
end

注意: assert_nothing_thrown は, このメソッドの逆ではない。

assert_throws
非推奨. assert_throw を使え。
build_message(head, template = nil, ...)
テストに失敗したときのメッセージを生成する。
flunk(message = "Flunked")
常に失敗する。

クラス Test::Unit::TestCase

テストケースを記述するためのスーパークラス。サブクラスにて実施するテストを記述する。test*() メソッドを追加し, setup, teardown メソッドを (必要があれば) オーバーライドする。Rubyのリフレクション機能によって、test*() メソッドが順に実行される。

TestCase 派生クラスを定義するファイルを実行すると、そのテストだけ行える。--helpでコマンドラインオプションが表示される。

$ ruby tc.rb --help
Test::Unit automatic runner.
Usage: tc.rb [options] [-- untouched arguments]

    -r, --runner=RUNNER              Use the given RUNNER.
                                     (c[onsole], f[ox], g[tk], g[tk]2, t[k])
    -n, --name=NAME                  Runs tests matching NAME.
                                     (patterns may be used).
    -t, --testcase=TESTCASE          Runs tests in TestCases matching TESTCASE.
                                     (patterns may be used).
    -v, --verbose=[LEVEL]            Set the output level (default is verbose).
                                     (s[ilent], p[rogress], n[ormal], v[erbose])
        --                           Stop processing options so that the
                                     remaining options will be passed to the
                                     test.
    -h, --help                       Display this help.

Deprecated options:
        --console                    Console runner (use --runner).
        --gtk                        GTK runner (use --runner).
        --fox                        Fox runner (use --runner).

Superclass

Object

Included Modules

Test::Unit::Assertions, Test::Unit::Util::BacktraceFilter

定数

FINISHED STARTED

シングルトンメソッド

suite

インスタンスメソッド

==
default_test
method_name
name
run
setup
サブクラスでオーバーライドする。各テストメソッドが呼び出される前に呼び出される。
size
teardown
サブクラスでオーバーライドする。各テストメソッドが戻ったあとに(例外が発生した場合でも)必ず呼び出される。
to_s