[pytest-dev] py.test and decorators

Sarah Mount mount.sarah at gmail.com
Thu Jan 23 19:27:01 CET 2014


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?

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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pytest-dev/attachments/20140123/efe9c92a/attachment.html>


More information about the Pytest-dev mailing list