coma_killen@fastmail.fm wrote:
Whats the standard way to reuse the Test::Unit tests for a
base class when deriving a subclass? Should the testcase
class derive from the base class testcase class or are there
better ways?
The best way I have found is to inherit, then create the testee in a method
called ‘warmUp’. Then override that method. Don’t call ‘warmUp’ from
‘initialize’.
This page does not contain enough:
http://c2.com/cgi/wiki?AbstractTest
Test rigs are pragmatic, not magic. Put another way, Liskov Substitution
Principle applies between the base and derived test, so the system should
not< be able to tell the difference between a test method that calls
‘warmUp’ and one that does not. LSP in the tests does not mean everyone
must call ‘warmUp’.
Classes, however, should follow LSP, so tests a base class should pass the
derived class should pass too.
Put them together, and some test methods should not call ‘warmUp’.
Pragmatically, they test support aspects of the tested class. LSP does not
apply.
So the complete answer: Inherit, but don’t override ‘initialize’. Override,
instead, ‘warmUp’, and call this at the top of each method. In the base
test class, ‘warmUp’ returns a base class instance, and in a derived class
it returns a derived class instance.
‘warmUp’ should assign the testee to a member variable (for convenience),
and the ‘tearDown’ method may care to destroy or un-do this testee.
(This happens to be Robert C. Martin’s “Stairway to Heaven Design Pattern”,
but with different LSP ramifications.)
···
–
Phlip
greencheese.org
– Set phasers on illin’ –