Object
Ties everything together. If you subclass and add your own test methods, it takes care of making them into tests and wrapping those tests into a suite. It also does the nitty-gritty of actually running an individual test and collecting its results into a Test::Unit::TestResult object.
You can run two hooks before/after a TestCase run.
Example:
class TestMyClass < Test::Unit::TestCase class << self def startup ... end def shutdown ... end end def setup ... end def cleanup ... end def teardown ... end def test_my_method1 ... end def test_my_method2 ... end end
Here is a call order:
startup
setup
test_my_method1
cleanup
teardown
setup
test_my_method2
cleanup
teardown
shutdown
Describes a test.
The following example associates "register a normal user" description with "test_register" test.
description "register a normal user" def test_register ... end
# File lib/test/unit/testcase.rb, line 280 def description(value, target=nil) attribute(:description, value, {}, target || []) end
Creates a new instance of the fixture for running the test represented by test_method_name.
# File lib/test/unit/testcase.rb, line 289 def initialize(test_method_name) @method_name = test_method_name @internal_data = InternalData.new end
Called after every test case runs. Can be used to tear down fixture information used in test case scope.
Here is an example test case:
class TestMyClass < Test::Unit::TestCase class << self def shutdown ... end end def teardown ... end def test_my_class1 ... end def test_my_class2 ... end end
Here is a call order:
test_my_class1 (or test_my_class2)
teardown
test_my_class2 (or test_my_class1)
teardown
shutdown
Note that you should not assume test order. Tests should be worked in any order.
# File lib/test/unit/testcase.rb, line 203 def shutdown end
Called before every test case runs. Can be used to set up fixture information used in test case scope.
Here is an example test case:
class TestMyClass < Test::Unit::TestCase class << self def startup ... end end def setup ... end def test_my_class1 ... end def test_my_class2 ... end end
Here is a call order:
startup
setup
test_my_class1 (or test_my_class2)
setup
test_my_class2 (or test_my_class1)
Note that you should not assume test order. Tests should be worked in any order.
# File lib/test/unit/testcase.rb, line 167 def startup end
Rolls up all of the test* methods in the fixture into one suite, creating a new instance of the fixture for each method.
# File lib/test/unit/testcase.rb, line 128 def suite suite_creator = TestSuiteCreator.new(self) suite_creator.create end
Defines a test in declarative syntax or marks following method as a test method.
In declarative syntax usage, the following two test definitions are the almost same:
description "register user" def test_register_user ... end test "register user" do ... end
In test method mark usage, the "my_test_method" is treated as a test method:
test def my_test_method assert_equal("call me", ...) end
# File lib/test/unit/testcase.rb, line 249 def test(*test_description_or_targets, &block) if block_given? test_description = test_description_or_targets.first if test_description.nil? raise ArgumentError, "test description is missing" end n_arguments = test_description_or_targets.size if n_arguments > 1 message = "wrong number of arguments (#{n_arguments} for 1)" raise ArgumentError, message end method_name = "test: #{test_description}" define_method(method_name, &block) description(test_description, method_name) attribute(:test, true, {}, method_name) else targets = test_description_or_targets attribute(:test, true, {}, *targets) end end
Returns the current test order. This returns :alphabetic by default.
# File lib/test/unit/testcase.rb, line 210 def test_order @@test_orders[self] || AVAILABLE_ORDERS.first end
Sets the current test order.
Here are the available order:
Default. Tests are sorted in alphabetic order.
Tests are sorted in random order.
Tests are sorted in defined order.
# File lib/test/unit/testcase.rb, line 223 def test_order=(order) @@test_orders[self] = order end
It's handy to be able to compare TestCase instances.
# File lib/test/unit/testcase.rb, line 519 def ==(other) return false unless other.kind_of?(self.class) return false unless @method_name == other.method_name return false unless data_label == other.data_label self.class == other.class end
Called after every test method runs but the test method isn't marked as 'passed'. Can be used to clean up and/or verify tested condition. e.g. Can be used to verify mock.
You can add additional cleanup tasks by the following code:
class TestMyClass < Test::Unit::TestCase def cleanup ... end cleanup def my_cleanup1 ... end cleanup do ... # cleanup callback1 end cleanup def my_cleanup2 ... end cleanup do ... # cleanup callback2 end def test_my_class ... end end
Here is a call order:
test_my_class
cleanup callback2
my_cleanup2
cleanup callback1
my_cleanup1
cleanup
# File lib/test/unit/testcase.rb, line 433 def cleanup end
Returns a label of test data for the test. If the test isn't associated with any test data, it returns nil.
# File lib/test/unit/testcase.rb, line 490 def data_label @internal_data.test_data_label end
# File lib/test/unit/testcase.rb, line 479 def default_test flunk("No tests were specified") end
Returns a description for the test. A description will be associated by Test::Unit::TestCase.test or Test::Unit::TestCase.description.
Returns a name for the test for no description test.
# File lib/test/unit/testcase.rb, line 509 def description self[:description] || name end
Returns elapsed time for the test was ran.
# File lib/test/unit/testcase.rb, line 532 def elapsed_time @internal_data.elapsed_time end
Returns whether the test is interrupted.
# File lib/test/unit/testcase.rb, line 537 def interrupted? @internal_data.interrupted? end
Returns a human-readable name for the specific test that this instance of TestCase represents.
# File lib/test/unit/testcase.rb, line 496 def name if @internal_data.have_test_data? "#{@method_name}[#{data_label}](#{self.class.name})" else "#{@method_name}(#{self.class.name})" end end
Returns whether this individual test passed or not. Primarily for use in teardown so that artifacts can be left behind if the test fails.
# File lib/test/unit/testcase.rb, line 544 def passed? @internal_data.passed? end
Runs the individual test method represented by this instance of the fixture, collecting statistics, failures and errors in result.
# File lib/test/unit/testcase.rb, line 318 def run(result) begin @_result = result @internal_data.test_started yield(STARTED, name) yield(STARTED_OBJECT, self) begin run_setup run_test run_cleanup add_pass rescue Exception @internal_data.interrupted raise unless handle_exception($!) ensure begin run_teardown rescue Exception raise unless handle_exception($!) end end @internal_data.test_finished result.add_run yield(FINISHED, name) yield(FINISHED_OBJECT, self) ensure # @_result = nil # For test-spec's after_all :< end end
Called before every test method runs. Can be used to set up fixture information.
You can add additional setup tasks by the following code:
class TestMyClass < Test::Unit::TestCase def setup ... end setup def my_setup1 ... end setup do ... # setup callback1 end setup def my_setup2 ... end setup do ... # setup callback2 end def test_my_class ... end end
Here is a call order:
setup
my_setup1
setup callback1
my_setup2
setup callback2
test_my_class
# File lib/test/unit/testcase.rb, line 388 def setup end
Returns a Time at the test was started.
# File lib/test/unit/testcase.rb, line 527 def start_time @internal_data.start_time end
Called after every test method runs. Can be used to tear down fixture information.
You can add additional teardown tasks by the following code:
class TestMyClass < Test::Unit::TestCase def teardown ... end teardown def my_teardown1 ... end teardown do ... # teardown callback1 end teardown def my_teardown2 ... end teardown do ... # teardown callback2 end def test_my_class ... end end
Here is a call order:
test_my_class
teardown callback2
my_teardown2
teardown callback1
my_teardown1
teardown
# File lib/test/unit/testcase.rb, line 476 def teardown end
Overridden to return name.
# File lib/test/unit/testcase.rb, line 514 def to_s name end
Generated with the Darkfish Rdoc Generator 2.