[Zope-dev] Test fixture concepts (was: Zope test layers, pytest, and test isolation)

Martin Aspeli optilude+lists at gmail.com
Sun Mar 27 11:13:43 EDT 2011


Hi,

On 27 March 2011 15:54, Uli Fouquet <uli at gnufix.de> wrote:

> The (limited) experiences with py.test, however, were awesome. Some
> points that are quite cool IMHO:
>
> - Easy finding of tests: just write some ``test_function`` in a
>  ``test_module`` and it will be found and executed. That also makes
>  py.test tests more readable and maybe more intuitive.

I'm not sure this is always a good idea. It feels a bit implicit, and
having a base class isn't really a big problem, IMHO. It seems a bit
like the kind of thing that sounds cool (look, it's even easier!), but
in practice makes little difference.

> - Lots of setup code (unrelated to fixtures) can simply be skipped. No
>  need to do the ``testsuite = <complex-testcase-collecting>`` over and
>  over again. Maybe the main point of py.test.

You don't need that for zope.testrunner either, of course, at least
not when using unittest base classes.

> - py.test is more widespread in the Python community (that's my
>  impression; I can't proof it)

What about nose?

> - Support of unittest/unittest2: you can write standard lib setups
>  (defining TestCases; no need to also write testsuite-setup stuff) and
>  they will be found/executed. zope.testrunner for instance does not
>  support the new `setUpClass`/`tearDownClass` concept of unittest2
>  (yes, you would use layers in that case; but it might be nice if
>  zope.testrunner  would support also class-wide fixtures in
>  unittest2-style; people from other worlds might expect that to work).

zope.testing should definitely gain support for the new unittest2
hooks. That wouldn't be very hard, though. ;-)

> Main drawbacks I see on py.test side are:
>
> - Lack of layer support (yet). Maybe we can do something about that in
>  `zope.pytest` based on `plone.testing.layer`.
>
> - Limited doctest support. It is quite difficult (AFAIK) to define
>  fixtures for doctests or to even set the usual doctest options
>  (``ELLIPSIS``, ``NORMALIZE_WHITESPACE``, ...) at setup time. Doctests
>  are simply collected and executed and not much finetuning is possible.

With zope.testrunner, you *do* need a test_suite method to run
doctests. I think that's a good thing. Look at plone.testing's README
for examples.

> My very own concern about the latter point is: if this cannot be solved
> satisfactorily (in terms of readability and ease of use at least),
> py.test will not become a really hot candidate in the testing framework
> game on the Zope side at all. There are too many doctests used already
> and whether you like them or not: every testing framework used should
> offer at least minimal support for doctest fixtures and doctest options.
> But I might just have missed these features in py.test and they are
> provided already.

FWIW, I think we should stop using .txt doctests for unit tests.
Doctests should be used to test *documentation* ("the examples are
valid"). For actual unit tests, writing tests in a unittest class is
almost always better in the long run. doctests don't scale well and
discourage the kind of ad-hoc "this seems broken, I'll just write a
quick test" or "I just fixed a bug, better add a regression test"
testing.

> For now I think that there is absolutely no need to think about a
> general move to py.test for the ztk.

I think there's benefit in unifying the concepts and support for
concepts like layers so that people can use the test runner they
prefer.

Maritn


More information about the Zope-Dev mailing list