[py-dev] reversing fixture/xunit setup call order?

holger krekel holger at merlinux.eu
Sun Dec 16 21:55:22 CET 2012


On Sun, Dec 16, 2012 at 13:49 -0700, lahwran wrote:
> I think it's best to think of the xunit-style setup and teardown as part of
> the actual test - as in, if you're blindly translating this:
> 
>     class SomethingTest(TestCase):
>         def setUp(self):
>             self.doop = 1
> 
>         def tearDown(self):
>             del self.doop
> 
>         def test_something(self):
>             assert self.doop == 1
> 
>         def test_something_else(self):
>             assert self.doop != 2
> 
> you'd get this:
> 
> 
>     class TestSomething(object):
>         def setUp(self):
>             self.doop = 1
> 
>         def tearDown(self):
>             del self.doop
> 
>         def test_something(self):
>             self.setUp()
>             try:
>                 assert self.doop == 1
>             finally:
>                 self.tearDown()
> 
>         def test_something_else(self):
>             self.setUp()
>             try:
>                 assert self.doop != 2
>             finally:
>                 self.tearDown()
>
> I'm not sure how to demonstrate an equivalent to setUpClass, but my point
> is that fixtures shouldn't even be able to tell that setup and teardown
> aren't part of the actual test method unless they look for it.

That speaks for executing fixtures ahead of xunit methods, right?

> As for allowing funcargs to the setup functions, I think marking them as
> @pytest.fixture(autouse=True) would be great. I do think that it'd be more
> intuitive for people who are used to xunit style if the @pytest.setup thing
> being discussed on the other thread was made available.

Do you know that you can use @pytest.fixture(autouse=True) on xUnit
setup methods already with the current release?  We could think about
introducing a ``@pytest.setup`` shortcut, but i don't think it's worth it.

best,
holger

> On Sun, Dec 16, 2012 at 12:24 PM, holger krekel <holger at merlinux.eu> wrote:
> 
> > On Sun, Dec 16, 2012 at 13:21 +0100, Ronny Pfannschmidt wrote:
> > > sounds like the correct curse of action else legacy tests cant be
> > > integrated with fixtures propperly
> >
> > "curse of action" ... like that one :)
> >
> > > i wonder if we should go as far as allowing fixtures to be arguments
> > > to pytest xunit test functions
> >
> > that'd be tricky at least for setup_module and setup_method/function which
> > support a positional argument.  Note that you can easily turn your setup
> > function into one that accepts fixtures:
> >
> >     @pytest.fixture
> >     def setup_method(self, request, tmpdir, ...):
> >         ...
> >
> > In this case there is no positional argument but you can get the
> > current function under test via ``request.function``.
> > I think it's clearer to add that extra line.
> >
> > holger
> >
> > > On 12/16/2012 12:23 PM, holger krekel wrote:
> > > >Hi all,
> > > >
> > > >Currently, if you define e.g. an autouse fixture function it is going to
> > > >be called _after_ the xUnit setup functions.  This is especially
> > > >surprising when you do a session-scoped autouse fixture.  I am wondering
> > > >if we could reverse the order, i.e. call fixture functions (including
> > > >autouse-fixtures of course) ahead of xUnit setup methods.
> > > >
> > > >any thoughts?
> > > >
> > > >holger
> > > >_______________________________________________
> > > >py-dev mailing list
> > > >py-dev at codespeak.net
> > > >http://codespeak.net/mailman/listinfo/py-dev
> > >
> >
> >

> _______________________________________________
> py-dev mailing list
> py-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/py-dev




More information about the Pytest-dev mailing list