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 
ian / caliban.org             | 
http://www.caliban.org      | 
                            |