Where is my TestResult?

So I'm teaching myself Ruby. I'm playing with Test::Unit. I've
progressed to:

class TC_venueCreate < Test::Unit::TestCase

  def test_Nil
      begin
      assert_nil(@v)
            rescue Test::Unit::AssertionFailedError
       puts "Ha ha! It ain't nil!"
       ???TestResult.failures.each {|f| puts f.short_display }
       raise
     end
  end

end

Where is that TestResult?

Thanks in advance

cgmjr schrieb:

So I'm teaching myself Ruby.

Welcome!

I'm playing with Test::Unit. I've progressed to:

class TC_venueCreate < Test::Unit::TestCase
....
  def test_Nil
      begin
      assert_nil(@v)
            rescue Test::Unit::AssertionFailedError
       puts "Ha ha! It ain't nil!"
       ???TestResult.failures.each {|f| puts f.short_display }
       raise
     end
  end
....
end

Where is that TestResult?

Maybe the following code helps a little bit:

   require "test/unit"
   require "enumerator"

   # the code is in the form of a unit test, just like yours
   class TestResultSearch < Test::Unit::TestCase

     # returns all known instances of the given class
     def instances_of klass
       ObjectSpace.enum_for( :each_object, klass ).to_a
     end

     # returns all classes with the name "TestResult"
     def testresult_classes
       instances_of( Class ).select { |c| c.name =~ /\bTestResult$/ }
     end

     # this test succeeds, so there is exactly one class named
     # "TestResult", but see the next test
     def test_find_class
       assert_equal 1, testresult_classes.size
     end

     # this test doesn't succeed, so the TestResult class doesn't have a
     # method named "failures". Look at the error message to find the
     # full name of the TestResult class
     def test_access_to_failures_via_class
       testresult_class = testresult_classes[ 0 ]
       assert_respond_to testresult_class, :failures
     end

     # returns all instances of the TestResult class
     def testresult_instances
       instances_of Test::Unit::TestResult
     end

     # this test succeeds, so there seems to be exactly one instance of
     # the TestResult class
     def test_find_instance
       assert_equal 1, testresult_instances.size
     end

     # this test doesn't succeed, so the instances of the TestResult
     # class don't have a method named "failures", either. Look at the
     # error message to find the instance variables of the TestResult
     # instance
     def test_access_to_failures_via_instance
       testresult_instance = testresult_instances[ 0 ]
       assert_respond_to testresult_instance, :failures
     end

     # without reading the Test::Unit source code, the only way to get at
     # the current list of failures I found is to look for the one
     # instance of TestResult and to access its "@failures" instance
     # variable
     def test_access_to_failures_instance_variable
       testresult_instance = testresult_instances[ 0 ]
       failures = testresult_instance.instance_variable_get :@failures
       assert_not_nil failures
     end

   end

The question is: what do you want to do with the current list of failures?

Regards,
Pit

Excellent, Pit! Many new nuggets of Rubyness for me to chew on here,
many thanks for taking the time on this Holiday to reply.

The question is: what do you want to do with the current list of failures?

As I mentioned, I'm exploring Test::Unit to better understand what's
going on under the surface. I don't have a particular need other than
familarization and dexterity with Ruby.

However, it seems that one must be able to locate the instance of
Test::Unit::TestResult in order to invoke it's #add_observer() method,
ja? Or perhaps there is a more direct way to Observe what is
happening? Again, I'm just curious at this point, but some context of
my project might help:

I wish to create a Ticket Box Office for my wife's theater company. It
is a facinating little problem, involving a neat little Domain Model of
Venues, Performances, Seats, Reservations, and the like. I'm starting
my Ruby journey by implementing a core concept, the Venue. It will be
a simple CRUD use case/user story(ies), but will lead to such fun as
SeatMaps and whatnot. Once I feel like I have sufficent understanding
of the Standard API, I'll move on to Rails and let the web fun begin!

Many thanks again for the code example...*runs of to start chewing*...
g.