Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > overriding setup in Test::Unit

Reply
Thread Tools

overriding setup in Test::Unit

 
 
Ian Macdonald
Guest
Posts: n/a
 
      02-04-2004
Hello,

I have some unit tests that I'm having a little trouble with.

This is basically the set-up:

class TC_Foo < Test::Unit::TestCase
def setup
...
end

def test_method1
...
end

def test_method2
...
end
end

class TC_Bar < TC_Foo
def setup
...
end

def test_method1
...
end

# TC_foo#method2 will get called for

end


All the tests for TC_Foo work as expected. The problem comes with
TC_Bar. I want TC_Bar#setup to be called prior to each of the unit tests
in that class, but I can't seem to make that happen. Instead,
TC_Foo#setup is called, which is not what I want at all.

I've tried explicitly undefining the setup method in TC_Bar with
'undef_method :setup', but even that doesn't work.

There must be a way to do this, right?

Ian
--
Ian Macdonald | The clothes have no emperor. -- C.A.R.
System Administrator | Hoare, commenting on ADA.
http://www.velocityreviews.com/forums/(E-Mail Removed) |
http://www.caliban.org |
|


 
Reply With Quote
 
 
 
 
Ian Macdonald
Guest
Posts: n/a
 
      02-04-2004
On Wed 04 Feb 2004 at 17:11:26 +0900, Ian Macdonald wrote:

> Hello,
>
> I have some unit tests that I'm having a little trouble with.
>
> This is basically the set-up:
>
> class TC_Foo < Test::Unit::TestCase
> def setup
> ...
> end
>
> def test_method1
> ...
> end
>
> def test_method2
> ...
> end
> end
>
> class TC_Bar < TC_Foo
> def setup
> ...
> end
>
> def test_method1
> ...
> end
>
> # TC_foo#method2 will get called for
>
> end
>
> All the tests for TC_Foo work as expected. The problem comes with
> TC_Bar. I want TC_Bar#setup to be called prior to each of the unit tests
> in that class, but I can't seem to make that happen. Instead,
> TC_Foo#setup is called, which is not what I want at all.
>
> I've tried explicitly undefining the setup method in TC_Bar with
> 'undef_method :setup', but even that doesn't work.
>
> There must be a way to do this, right?


In the example above, I have renamed the classes from their true names.
Interestingly, I now note that I get the correct overriding behaviour if
the subclass of TC_Foo has a name that alphabetically sorts earlier.

In other words, the code as shown above actually works, because TC_Bar
(the subclass) sorts higher than TC_Foo (the superclass). If I change
the name of the TC_Bar class to TC_Goo, however, TC_Foo#setup is no
longer overridden by the method of the same name in the subclass.

This seems like an odd and arbitrary way to go about things. Is this the
intention or some obscure side-effect of my trying to do something
irrational?

Ian
--
Ian Macdonald | War spares not the brave, but the cowardly.
System Administrator | -- Anacreon
(E-Mail Removed) |
http://www.caliban.org |
|


 
Reply With Quote
 
 
 
 
nobu.nokada@softhome.net
Guest
Posts: n/a
 
      02-04-2004
Hi,

At Wed, 4 Feb 2004 17:26:54 +0900,
Ian Macdonald wrote in [ruby-talk:91524]:
> In the example above, I have renamed the classes from their true names.
> Interestingly, I now note that I get the correct overriding behaviour if
> the subclass of TC_Foo has a name that alphabetically sorts earlier.
>
> In other words, the code as shown above actually works, because TC_Bar
> (the subclass) sorts higher than TC_Foo (the superclass). If I change
> the name of the TC_Bar class to TC_Goo, however, TC_Foo#setup is no
> longer overridden by the method of the same name in the subclass.
>
> This seems like an odd and arbitrary way to go about things. Is this the
> intention or some obscure side-effect of my trying to do something
> irrational?


Seems fine.

$ cat test.rb
class TC_Foo < Test::Unit::TestCase
def setup
puts "Foo#setup"
end

def test_method1
assert_nothing_raised {puts "Foo#test_method1"}
end

def test_method2
assert_nothing_raised {puts "Foo#test_method2"}
end
end

class TC_Goo < TC_Foo
def setup
puts "Goo#setup"
end

def test_method1
assert_nothing_raised {puts "Goo#test_method1"}
end

# TC_foo#method2 will get called for

end
$ testrb -vs test.rb
Foo#setup
Foo#test_method1
Foo#setup
Foo#test_method2
Goo#setup
Goo#test_method1
Goo#setup
Foo#test_method2

--
Nobu Nakada


 
Reply With Quote
 
Ian Macdonald
Guest
Posts: n/a
 
      02-04-2004
On Wed 04 Feb 2004 at 18:21:33 +0900, (E-Mail Removed) wrote:

> Seems fine.
>
> $ cat test.rb
> class TC_Foo < Test::Unit::TestCase
> def setup
> puts "Foo#setup"
> end
>
> def test_method1
> assert_nothing_raised {puts "Foo#test_method1"}
> end
>
> def test_method2
> assert_nothing_raised {puts "Foo#test_method2"}
> end
> end
>
> class TC_Goo < TC_Foo
> def setup
> puts "Goo#setup"
> end
>
> def test_method1
> assert_nothing_raised {puts "Goo#test_method1"}
> end
>
> # TC_foo#method2 will get called for
>
> end
> $ testrb -vs test.rb
> Foo#setup
> Foo#test_method1
> Foo#setup
> Foo#test_method2
> Goo#setup
> Goo#test_method1
> Goo#setup
> Foo#test_method2


The real code is more complex, of course. A lot of files are being
'require'd and there are modules being mixed in, too, so I think I'm
experiencing some weird interaction there.

Thanks for your help.

Ian
--
Ian Macdonald | The only cultural advantage LA has over NY
System Administrator | is that you can make a right turn on a red
(E-Mail Removed) | light. -- Woody Allen
http://www.caliban.org |
|


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[ANN] Ruby Setup 5 (setup.rb) Intransition Ruby 0 01-13-2010 04:24 PM
python setup.py: how to override a setup.cfg value ? Chris Shenton Python 1 08-24-2007 06:27 AM
Windows XP Setup Restarts the Setup Program =?Utf-8?B?UmFkYXIxNjU=?= Windows 64bit 21 12-14-2005 04:27 AM
overriding,shadowing concept sangam via .NET 247 ASP .Net 1 06-23-2004 03:46 AM
A design ( inheriteance / overriding ) question sourabh ASP .Net 1 05-21-2004 06:25 AM



Advertisments