Class Test::Unit::TestCase
In: test/unit/testcase.rb
Parent: 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.

Methods

==   default_test   name   new   run   setup   size   suite   teardown   to_s  

Included Modules

Assertions Util::BacktraceFilter

Constants

STARTED = name + "::STARTED"
FINISHED = name + "::FINISHED"

Attributes

method_name  [R] 

Public Class methods

Creates a new instance of the fixture for running the test represented by test_method_name.

[Source]

# File test/unit/testcase.rb, line 33
      def initialize(test_method_name)
        unless(respond_to?(test_method_name) and
               (method(test_method_name).arity == 0 ||
                method(test_method_name).arity == -1))
          throw :invalid_test
        end
        @method_name = test_method_name
        @test_passed = true
      end

Rolls up all of the test* methods in the fixture into one suite, creating a new instance of the fixture for each method.

[Source]

# File test/unit/testcase.rb, line 46
      def self.suite
        method_names = public_instance_methods(true)
        tests = method_names.delete_if {|method_name| method_name !~ /^test./}
        suite = TestSuite.new(name)
        tests.sort.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
        return suite
      end

Public Instance methods

It‘s handy to be able to compare TestCase instances.

[Source]

# File test/unit/testcase.rb, line 145
      def ==(other)
        return false unless(other.kind_of?(self.class))
        return false unless(@method_name == other.method_name)
        self.class == other.class
      end

[Source]

# File test/unit/testcase.rb, line 100
      def default_test
        flunk("No tests were specified")
      end

Returns a human-readable name for the specific test that this instance of TestCase represents.

[Source]

# File test/unit/testcase.rb, line 135
      def name
        "#{@method_name}(#{self.class.name})"
      end

Runs the individual test method represented by this instance of the fixture, collecting statistics, failures and errors in result.

[Source]

# File test/unit/testcase.rb, line 67
      def run(result)
        yield(STARTED, name)
        @_result = result
        begin
          setup
          __send__(@method_name)
        rescue AssertionFailedError => e
          add_failure(e.message, e.backtrace)
        rescue StandardError, ScriptError
          add_error($!)
        ensure
          begin
            teardown
          rescue AssertionFailedError => e
            add_failure(e.message, e.backtrace)
          rescue StandardError, ScriptError
            add_error($!)
          end
        end
        result.add_run
        yield(FINISHED, name)
      end

Called before every test method runs. Can be used to set up fixture information.

[Source]

# File test/unit/testcase.rb, line 92
      def setup
      end

[Source]

# File test/unit/testcase.rb, line 112
      def size
        1
      end

Called after every test method runs. Can be used to tear down fixture information.

[Source]

# File test/unit/testcase.rb, line 97
      def teardown
      end

Overridden to return name.

[Source]

# File test/unit/testcase.rb, line 140
      def to_s
        name
      end

[Validate]

ruby-doc.org is hosted and maintained by James Britt and Neurogami, LLC, a Ruby consulting company. The site was created in 2002 as part of the Ruby Documentation Project to promote the Ruby language and to help other Ruby hackers.

Documentation content on ruby-doc.org is provided by remarkable members of the Ruby community.

For more information on the Ruby programming language, visit ruby-lang.org.

For information about this site or Neurogami, contact james@neurogami.com.