[TIP] Testing the Fixture?

iain duncan iainduncan at telus.net
Wed Nov 21 12:41:18 PST 2007


On Wed, 2007-21-11 at 11:59 -0800, Titus Brown wrote:
> -> Any suggestions on how to write tests where the fixture gets tested as well?
> 
> [ ... ]
>  
> -> I've got 2 problems:
> -> Structuring the tests w/o code duplication is difficult, because I don't want 
> -> to run the fixture for test_load().  I can probably work around this by 
> -> abstracting the guts of the fixture/test_load() into a do_load() method on a 
> -> base class and then using 2 subclasses, but eww.
> 
> I don't understand the guts of your problem, but my uneducated guess
> is that some variant of class or module fixtures will solve your
> problem if you only want fixtures run once.
> 
> -> The second problem is that I'd like the subsequent tests to be run only if the 
> -> test for the fixture passes, since they're dependent on successfully loading 
> -> the data to begin with.  I dunno what the theory/best practice for this sort 
> -> of contingent test is... do you just let the dependent tests fail and clutter 
> -> up the screen with the same traceback half a dozen times?
> 
> This is easier to solve, I think.  If the fixture "fails" (with an
> assert) I believe that the tests are not run.  However, the fixtures are
> run according to the normal rules, so if you have multiple tests then
> you will get multiple errors on object fixtures -- that is, one for each
> test.
> 
> for example,
> 
> class Test:
>    def setup(self):
>       assert 0
> 
>    def test_1(self):
>       pass
> 
>    def test_2(self):
>       pass
> 
>    def teardown(self):
>       pass
> 
> will give you two errors, once for each time 'setup()' is run.
> 
> If you have a class or module fixture, then it will be run only once and
> if it fails the tests will not be run.

Could you manually throw an exception that aborts all the remaining
tests? Would there a point to that?

# module setup
setup():
  try:
    assert some stuff, 'fixture failed, bailing out'
  catch:
    raise KillerException

??

Thanks
Iain





More information about the testing-in-python mailing list