What runs when running tests?

I guess I'm still learning ruby.

While looking through the test code I realized I don't see what
actually _runs_.

My tests extend Test::Unit::TestCase, and define tests as

def test_sometestname
# some testing stuff
end

I scanned Test::Unit::TestCase and I see a bunch of function
definitions, but I don't see what runs. I guess I'm looking for a
method or piece of code that starts running, initializes things, finds
the test_* test methods and starts running them.

It's probably staring me in the face. Please point it out to me.

Thank you.

-Kelly

A TestRunner.

See the files in lib/1.8/test/unit for more information if you want to
understand Test::Unit.

-austin

···

On 2/14/07, kelly <railsinator@gmail.com> wrote:

I guess I'm still learning ruby.

While looking through the test code I realized I don't see what
actually _runs_.

--
Austin Ziegler * halostatue@gmail.com * http://www.halostatue.ca/
               * austin@halostatue.ca * You are in a maze of twisty little passages, all alike. // halo • statue
               * austin@zieglers.ca

To expand on Austin's answer just a little: I think the magic that
you're looking for is at the tail end of unit.rb, in the
lib/1.8/test/unit directory of the standard library. Test::Unit takes
advantage of the at_exit() method to register a little bit of code
that invokes the Test::Unit AutoRunner class right before the
interpreter exits.

···

On 2/14/07, kelly <railsinator@gmail.com> wrote:

I scanned Test::Unit::TestCase and I see a bunch of function
definitions, but I don't see what runs. I guess I'm looking for a
method or piece of code that starts running, initializes things, finds
the test_* test methods and starts running them.

Thanks.

Here is what I've learned so far:

I'm testing rails code. The generated rails test stubs have this line:

require File.dirname(__FILE__) + '/../test_helper'

app/test/test_helper.rb contains this line:

require 'test_help'

lib/ruby/gems/1.8/rails-1.1.6/lib/test_help.rb contains this line:

require 'test/unit'

lib/ruby/1.8/test/unit.rb contains these lines:

at_exit do
  unless $! || Test::Unit.run?
    exit Test::Unit::AutoRunner.run
  end
end

I think this is the magic that runs the tests.

-Kelly

···

On Feb 14, 8:46 am, "Austin Ziegler" <halosta...@gmail.com> wrote:

On 2/14/07, kelly <railsina...@gmail.com> wrote:

> I guess I'm still learning ruby.

> While looking through the test code I realized I don't see what
> actually _runs_.

A TestRunner.

See the files in lib/1.8/test/unit for more information if you want to
understand Test::Unit.

-austin
--
Austin Ziegler * halosta...@gmail.com *http://www.halostatue.ca/
               * aus...@halostatue.ca *You are in a maze of twisty little passages, all alike. // halo • statue
               * aus...@zieglers.ca

Lyle,

Thanks very much.

I see the code you refer to. Now I wonder why it is done using the
at_exit method -- seems a little obtuse to me.

My original question has been answered. Thanks again.

-Kelly

···

On Feb 14, 9:22 am, "Lyle Johnson" <lyle.john...@gmail.com> wrote:

On 2/14/07, kelly <railsina...@gmail.com> wrote:

> I scanned Test::Unit::TestCase and I see a bunch of function
> definitions, but I don't see what runs. I guess I'm looking for a
> method or piece of code that starts running, initializes things, finds
> the test_* test methods and starts running them.

To expand on Austin's answer just a little: I think the magic that
you're looking for is at the tail end of unit.rb, in the
lib/1.8/test/unit directory of the standard library. Test::Unit takes
advantage of the at_exit() method to register a little bit of code
that invokes the Test::Unit AutoRunner class right before the
interpreter exits.

In Python's unit testing framework, you have to explicitly include
this code in every one of your test files. It's a real pain. Using the
at_exit hook in Ruby makes your unit tests cleaner.

···

On Feb 14, 11:41 am, "kelly" <railsina...@gmail.com> wrote:

I see the code you refer to. Now I wonder why it is done using the
at_exit method -- seems a little obtuse to me.