[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Why does running a Test::unit test in irb work so weirdly?

Peter Recore

2/16/2008 7:35:00 PM

Why can't I run a Test::Unit::TestCase from IRB and have it run before I
quit?
I have found this problem mentioned by others. For an example, see this
tutorial about testing:

http://www.nullislove.com/2007/11/14/testing-in-rails-part-1-unit-testin...

>irb --simple-prompt
>> require 'test/unit'
=> true
>> class FirstTests < Test::Unit::TestCase
>> def test_addition
>> assert(1 + 1 == 2)
>> end
>>
>> def test_subtraction
>> assert(1 - 1 == 2)
>> end
>> end
=> nil
>> quit
Loaded suite irb
Started
F
Finished in 0.00119 seconds.

The author mentions that a quirk of irb makes this happen but doesn't
say what the quirk is:

"When we finished the definition, nothing happened. When we exited IRB,
then our tests ran. Thatâ??s a characteristic of using IRB for our tests
and wonâ??t be significant as we move on."

Thanks for any insight you have.
--
Posted via http://www.ruby-....

2 Answers

Phlip

2/16/2008 9:19:00 PM

0

Peter Recore wrote:

> "When we finished the definition, nothing happened. When we exited IRB,
> then our tests ran. Thatâ??s a characteristic of using IRB for our tests
> and wonâ??t be significant as we move on."

In general, the package has this problem because the best way to run
tests is with an editor. After a change you hit one button, and this runs
the current test. If you don't have editor keystroke bindings there, get
with ZenTest's autotest, and use it to trigger a test run each time you
save your files.

The tests run when IRB exits because RubyUnit is designed to run tests
automatically if you invoke their files with 'ruby file_test.rb'. You
wouldn't need to add these lines to the bottom of each test case:

runner = Test::Unit::UI::Console::TestRunner
got = runner.run(aTestCase.suite)
badThings += got.error_count + got.failure_count

That might work in IRB, too.

--
Phlip
http://www.oreillynet.com/ruby/blog/2008/02/as...

Christopher Dicely

2/16/2008 10:45:00 PM

0

On Feb 16, 2008 11:35 AM, Peter Recore <peterrecore@gmail.com> wrote:
> Why can't I run a Test::Unit::TestCase from IRB and have it run before I
> quit?

You can, you just have to explicitly tell it to run. Normally, you
don't explicitly run Test::Unit tests, you simply define them and then
they run automagically when ruby exits, because the Test::Unit
library, when it is loaded, loads an at_exit routine that will (unless
something has told it not too) run the tests that have been defined.
Its not really an IRB quirk that stops them from running until you
exit, its just that when you run a script with unit tests
"standalone", you don't realize that the tests are run when it is
exiting. With IRB, you just notice what is going on regularly when you
use Test::Unit.

The RDoc for Test::Unit gives this example of how to explicitly run a test case:

require 'test/unit/ui/console/testrunner'
Test::Unit::UI::Console::TestRunner.run(TC_MyTest)