[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

ARGV and unit tests: different problem

yuricake

4/17/2007 4:07:00 AM

Hello,

I am experiencing the following strange problem (this is present in
ruby versions 1.8.5 and 1.8.6): if I rely on the test suites to be run
automatically, the ARGV variable is no longer present inside the
testcases. If I run the test suites explicitly, the ARGV variable
remains the same. I do not understand if this is a bug or if I am
misunderstanding what the automatic test runner does.

The two code snippets below illustrate what I mean:

require "test/unit"
require "pp"
class TC_Mysql < Test::Unit::TestCase
def setup()
puts "inside"
pp ARGV
end
def test_one()
assert_equal(1, 1)
end
end
puts "outside"
pp ARGV

if I run the above code with:

ruby test.rb Yo

I get the following output:

outside
["yo"]
Loaded suite args
Started
inside
[]

However, if I modify the code snippet to:

require "test/unit"
require "pp"
class TC_Mysql < Test::Unit::TestCase
def setup()
puts "inside"
pp ARGV
end
def test_one()
assert_equal(1, 1)
end
end
puts "outside"
pp ARGV
require 'test/unit/ui/console/testrunner'
Test::Unit::UI::Console::TestRunner.run(TC_Mysql)

running it with

ruby test.rb Yo

I get the following output:

outside
["yo"]
Loaded suite TC_Mysql
Started
inside
["yo"]

1 Answer

Jano Svitok

4/17/2007 8:24:00 AM

0

On 4/17/07, yuricake <yuricake@gmail.com> wrote:
> Hello,
>
> I am experiencing the following strange problem (this is present in
> ruby versions 1.8.5 and 1.8.6): if I rely on the test suites to be run
> automatically, the ARGV variable is no longer present inside the
> testcases. If I run the test suites explicitly, the ARGV variable
> remains the same. I do not understand if this is a bug or if I am
> misunderstanding what the automatic test runner does.
>
> The two code snippets below illustrate what I mean:
>
> require "test/unit"
> require "pp"
> class TC_Mysql < Test::Unit::TestCase
> def setup()
> puts "inside"
> pp ARGV
> end
> def test_one()
> assert_equal(1, 1)
> end
> end
> puts "outside"
> pp ARGV
>
> if I run the above code with:
>
> ruby test.rb Yo
>
> I get the following output:
>
> outside
> ["yo"]
> Loaded suite args
> Started
> inside
> []
>
> However, if I modify the code snippet to:
>
> require "test/unit"
> require "pp"
> class TC_Mysql < Test::Unit::TestCase
> def setup()
> puts "inside"
> pp ARGV
> end
> def test_one()
> assert_equal(1, 1)
> end
> end
> puts "outside"
> pp ARGV
> require 'test/unit/ui/console/testrunner'
> Test::Unit::UI::Console::TestRunner.run(TC_Mysql)
>
> running it with
>
> ruby test.rb Yo
>
> I get the following output:
>
> outside
> ["yo"]
> Loaded suite TC_Mysql
> Started
> inside
> ["yo"]

Hi,

your problem is caused by the fact that autorunner responds to some
command line arguments (run your suite with --help for the list). if
you want to pass arguments to your tests, use -- as a delimiter
between testrunner's and your arguments.

For very detailed info read lib/test/unit/autorunner.rb.

J.