Class: Test::Unit::TestCase
- Inherits:
-
Object
- Object
- Test::Unit::TestCase
- Includes:
- Assertions, Attribute, ErrorHandler, ExceptionHandler, FailureHandler, Fixture, Priority, TestCaseNotificationSupport, TestCaseOmissionSupport, TestCasePendingSupport, Util::BacktraceFilter, Util::Output
- Defined in:
- lib/test/unit/testcase.rb
Overview
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 teardown
...
end
def test_my_method1
...
end
def test_my_method2
...
end
end
Here is a call order:
-
startup
-
setup
-
test_my_method1
-
teardown
-
setup
-
test_my_method2
-
teardown
-
shutdown
Constant Summary collapse
- STARTED =
:nodoc:
name + "::STARTED"
- FINISHED =
:nodoc:
name + "::FINISHED"
- DESCENDANTS =
:nodoc:
[]
- AVAILABLE_ORDERS =
:nodoc:
[:alphabetic, :random, :defined]
- @@added_methods =
{}
- @@test_orders =
{}
Constants included from Util::BacktraceFilter
Util::BacktraceFilter::TESTUNIT_FILE_SEPARATORS, Util::BacktraceFilter::TESTUNIT_PREFIX, Util::BacktraceFilter::TESTUNIT_RB_FILE
Constants included from Assertions
Constants included from ErrorHandler
ErrorHandler::NOT_PASS_THROUGH_EXCEPTIONS, ErrorHandler::PASS_THROUGH_EXCEPTIONS
Instance Attribute Summary collapse
-
#method_name ⇒ Object
readonly
Returns the value of attribute method_name.
Class Method Summary collapse
-
.description(value, target = nil) ⇒ Object
Describes a test.
-
.inherited(sub_class) ⇒ Object
:nodoc:.
-
.method_added(name) ⇒ Object
:nodoc:.
-
.shutdown ⇒ Object
Called after every test case runs.
-
.startup ⇒ Object
Called before every test case runs.
-
.suite ⇒ Object
Rolls up all of the test* methods in the fixture into one suite, creating a new instance of the fixture for each method.
-
.test(test_description, &block) ⇒ Object
Defines a test in declarative syntax.
-
.test_order ⇒ Object
Returns the current test order.
-
.test_order=(order) ⇒ Object
Sets the current test order.
Instance Method Summary collapse
-
#==(other) ⇒ Object
It’s handy to be able to compare TestCase instances.
- #default_test ⇒ Object
-
#description ⇒ Object
Returns a description for the test.
-
#initialize(test_method_name) ⇒ TestCase
constructor
Creates a new instance of the fixture for running the test represented by test_method_name.
- #interrupted? ⇒ Boolean
-
#name ⇒ Object
Returns a human-readable name for the specific test that this instance of TestCase represents.
-
#run(result) ⇒ Object
Runs the individual test method represented by this instance of the fixture, collecting statistics, failures and errors in result.
-
#setup ⇒ Object
Called before every test method runs.
- #size ⇒ Object
-
#teardown ⇒ Object
Called after every test method runs.
-
#to_s ⇒ Object
Overridden to return #name.
Methods included from Util::Output
Methods included from Util::BacktraceFilter
Methods included from Assertions
#assert, #assert_alias_method, #assert_block, #assert_boolean, #assert_compare, #assert_const_defined, #assert_equal, #assert_fail_assertion, #assert_false, #assert_in_delta, #assert_instance_of, #assert_kind_of, #assert_match, #assert_nil, #assert_no_match, #assert_not_const_defined, #assert_not_equal, #assert_not_nil, #assert_not_predicate, #assert_not_same, #assert_nothing_raised, #assert_nothing_thrown, #assert_operator, #assert_path_exist, #assert_path_not_exist, #assert_predicate, #assert_raise, #assert_raise_kind_of, #assert_raise_message, #assert_raises, #assert_respond_to, #assert_same, #assert_send, #assert_throw, #assert_throws, #assert_true, #build_message, #flunk, use_pp=
Methods included from Priority
available_values, default, default=, disable, enable, enabled?, included, #priority_setup, #priority_teardown
Methods included from TestCaseNotificationSupport
Methods included from TestCaseOmissionSupport
included, #omit, #omit_if, #omit_unless
Methods included from TestCasePendingSupport
Methods included from FailureHandler
Methods included from ErrorHandler
Methods included from ExceptionHandler
Methods included from Fixture
Methods included from Attribute
Constructor Details
#initialize(test_method_name) ⇒ TestCase
Creates a new instance of the fixture for running the test represented by test_method_name.
298 299 300 301 302 303 304 305 306 307 308 309 |
# File 'lib/test/unit/testcase.rb', line 298 def initialize(test_method_name) throw :invalid_test unless respond_to?(test_method_name) test_method = method(test_method_name) throw :invalid_test if test_method.arity > 0 owner = Util::MethodOwnerFinder.find(self, test_method_name) if owner.class != Module and self.class != owner throw :invalid_test end @method_name = test_method_name @test_passed = true @interrupted = false end |
Instance Attribute Details
#method_name ⇒ Object (readonly)
Returns the value of attribute method_name.
294 295 296 |
# File 'lib/test/unit/testcase.rb', line 294 def method_name @method_name end |
Class Method Details
.description(value, target = nil) ⇒ Object
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
251 252 253 |
# File 'lib/test/unit/testcase.rb', line 251 def description(value, target=nil) attribute(:description, value, {}, target || []) end |
.inherited(sub_class) ⇒ Object
:nodoc:
95 96 97 |
# File 'lib/test/unit/testcase.rb', line 95 def inherited(sub_class) # :nodoc: DESCENDANTS << sub_class end |
.method_added(name) ⇒ Object
:nodoc:
100 101 102 103 104 105 106 107 108 |
# File 'lib/test/unit/testcase.rb', line 100 def method_added(name) # :nodoc: super added_methods = (@@added_methods[self] ||= []) stringified_name = name.to_s if added_methods.include?(stringified_name) attribute(:redefined, true, {}, stringified_name) end added_methods << stringified_name end |
.shutdown ⇒ Object
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.
198 199 |
# File 'lib/test/unit/testcase.rb', line 198 def shutdown end |
.startup ⇒ Object
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.
162 163 |
# File 'lib/test/unit/testcase.rb', line 162 def startup end |
.suite ⇒ Object
Rolls up all of the test* methods in the fixture into one suite, creating a new instance of the fixture for each method.
113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/test/unit/testcase.rb', line 113 def suite suite = TestSuite.new(name, self) collect_test_names.each do |test| catch(:invalid_test) do suite << new(test) end end if suite.empty? catch(:invalid_test) do suite << new("default_test") end end suite end |
.test(test_description, &block) ⇒ Object
Defines a test in declarative syntax.
The following two test definitions are the same:
description "register user"
def test_register_user
...
end
test "register user" do
...
end
234 235 236 237 238 239 |
# File 'lib/test/unit/testcase.rb', line 234 def test(test_description, &block) normalized_description = test_description.gsub(/[^a-zA-Z\d_]+/, '_') method_name = "test_#{normalized_description}".to_sym define_method(method_name, &block) description(test_description, method_name) end |
.test_order ⇒ Object
Returns the current test order. This returns :alphabetic
by default.
205 206 207 |
# File 'lib/test/unit/testcase.rb', line 205 def test_order @@test_orders[self] || AVAILABLE_ORDERS.first end |
.test_order=(order) ⇒ Object
Sets the current test order.
Here are the available order:
- :alphabetic
-
Default. Tests are sorted in alphabetic order.
- :random
-
Tests are sorted in random order.
- :defined
-
Tests are sorted in defined order.
218 219 220 |
# File 'lib/test/unit/testcase.rb', line 218 def test_order=(order) @@test_orders[self] = order end |
Instance Method Details
#==(other) ⇒ Object
It’s handy to be able to compare TestCase instances.
433 434 435 436 437 |
# File 'lib/test/unit/testcase.rb', line 433 def ==(other) return false unless(other.kind_of?(self.class)) return false unless(@method_name == other.method_name) self.class == other.class end |
#default_test ⇒ Object
404 405 406 |
# File 'lib/test/unit/testcase.rb', line 404 def default_test flunk("No tests were specified") end |
#description ⇒ Object
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.
423 424 425 |
# File 'lib/test/unit/testcase.rb', line 423 def description self[:description] || name end |
#interrupted? ⇒ Boolean
439 440 441 |
# File 'lib/test/unit/testcase.rb', line 439 def interrupted? @interrupted end |
#name ⇒ Object
Returns a human-readable name for the specific test that this instance of TestCase represents.
414 415 416 |
# File 'lib/test/unit/testcase.rb', line 414 def name "#{@method_name}(#{self.class.name})" end |
#run(result) ⇒ Object
Runs the individual test method represented by this instance of the fixture, collecting statistics, failures and errors in result.
314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 |
# File 'lib/test/unit/testcase.rb', line 314 def run(result) begin @_result = result yield(STARTED, name) begin run_setup run_test rescue Exception @interrupted = true raise unless handle_exception($!) ensure begin run_teardown rescue Exception raise unless handle_exception($!) end end result.add_run yield(FINISHED, name) ensure # @_result = nil # For test-spec's after_all :< end end |
#setup ⇒ Object
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
def my_setup2
...
end
def test_my_class
...
end
end
Here is a call order:
-
setup
-
my_setup1
-
my_setup2
-
test_my_class
368 369 |
# File 'lib/test/unit/testcase.rb', line 368 def setup end |
#size ⇒ Object
408 409 410 |
# File 'lib/test/unit/testcase.rb', line 408 def size 1 end |
#teardown ⇒ Object
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
def my_teardown2
...
end
def test_my_class
...
end
end
Here is a call order:
-
test_my_class
-
my_teardown2
-
my_teardown1
-
teardown
401 402 |
# File 'lib/test/unit/testcase.rb', line 401 def teardown end |
#to_s ⇒ Object
Overridden to return #name.
428 429 430 |
# File 'lib/test/unit/testcase.rb', line 428 def to_s name end |