[pytest-dev] py.test and decorators

holger krekel holger at merlinux.eu
Thu Jan 23 19:30:08 CET 2014


On Thu, Jan 23, 2014 at 18:27 +0000, Sarah Mount wrote:
> The tests were completely ad-hoc and did not use unittest or any other
> library. They had a hand-rolled runner which ran all the functions like
> test_one_one from a script.
> 
> The odd thing is that Python 2.7 + py.test + the functools.wraps version of
> the decorators worked OK.
> 
> Could it be that I have inadvertently turned the logging module on and
> output from that is confusing the py.test runner?

wouldn't think so.  Can you attach a zip file and state the dependencies 
so we can try to reproduce?  Or a repo-url?

holger

> Thanks,
> 
> Sarah
> 
> 
> On Thu, Jan 23, 2014 at 6:08 PM, holger krekel <holger at merlinux.eu> wrote:
> 
> > Hi Sarah,
> >
> > On Wed, Jan 22, 2014 at 21:21 +0000, Sarah Mount wrote:
> > > Hi there,
> > >
> > > I am currently converting some very idiosyncratic hand-rolled tests into
> > > more sensible unit tests with pytest. I had a problem running tests which
> > > dealt with decorators and following the advice here:
> > >
> > >
> > http://stackoverflow.com/questions/19614658/how-do-i-make-pytest-fixtures-work-with-decorated-functions
> > >
> > > I refactored all my decorators to use the decorator library rather than
> > > functools.wraps.
> > >
> > > The win there was that now the Python 2.7 version of my code behaves in
> > the
> > > same way as the Python 3.3 code (whereas before the 2.7 code passed and
> > the
> > > 3.3 code errored). The fail is that now none of the tests run at all!
> > >
> > > I tried running tests without py.test (as in: python -m
> > > mylib.test.test_one) and they ran as expected. If I try to use the
> > library
> > > just from a REPL session it seems OK. I suspect that the issue has
> > occurred
> > > because I haven't yet understood where to use pytest fixtures.
> > >
> > > The (simplified) code looks roughly like this:
> > >
> > > ### FILE base.py
> > >
> > > @process
> > > def foo(channel):
> > >     channel.write(100)
> > >
> > > @process
> > > def bar(channel):
> > >     channel.read()
> > >
> > > ### FILE test_one.py
> > >
> > > def test_one_one():
> > >     channel = Channel()
> > >     par(foo(channel), bar(channel)).start()
> >
> > Could you post the code that runs under the unittests framework
> > as well?
> >
> > The test looks OK, maybe "py.test -s mylib" (don't capture output)
> > would give a clue why the test run bails out the way it does.
> >
> > best,
> > holger
> >
> > >
> > >
> > > And the results look like this:
> > >
> > > $ py.test mylib/
> > > ================================================================ test
> > > session starts
> > > =================================================================
> > > platform linux2 -- Python 2.7.5 -- pytest-2.5.1
> > > collected 44 items
> > >
> > > mylib/test/test_one.py (venv)$
> > >
> > >
> > > I have tried putting the @pytest.fixture decorator on both the functions
> > in
> > > base.py and those in test_one.py but neither works.
> > >
> > > Any ideas?
> > >
> > > Thanks,
> > >
> > > Sarah
> > >
> > > --
> > > Sarah Mount, Senior Lecturer, University of Wolverhampton
> > > website:  http://www.snim2.org/
> > > twitter: @snim2
> >
> > > _______________________________________________
> > > Pytest-dev mailing list
> > > Pytest-dev at python.org
> > > https://mail.python.org/mailman/listinfo/pytest-dev
> >
> >
> 
> 
> -- 
> Sarah Mount, Senior Lecturer, University of Wolverhampton
> website:  http://www.snim2.org/
> twitter: @snim2


More information about the Pytest-dev mailing list