Hey Vladimir,

thanks for your considerations (relating to
http://pytest.org/dev/yieldfixture.html )

I am going to write a condensed reply to the few points where i disagree.

TLDR, i suggest to go for ``yield_fixture`` for pytest-2.4.

On Sat, Sep 28, 2013 at 22:29 +0200, Vladimir Keleshev wrote:
> Now, to comment on disadvantages:
> Yield-style fixtures present us with a superset of
> functionality of what return-style fixtures can achieve.
> I would even like to say that except for backwards-compatibility
> and user habit concerns, there is no need for return-style
> fixtures at all, if yield-style is available.  So I would
> even argue that yield-style fixtures should take the main
> place in fixture documentation, and return-style fixtures
> mentioned for backwards compatibility (as funcargs are).

We can discuss this for 2.5 but not for 2.4.  It's too
massive a change at this point.  Also, from giving
courses to non-expert Pythonistas i know that "yield"
(as much as inheritance and other concepts) are not easy
concepts if if they are in computer science.

> 4.2 There is a high chance (in my experience) of mistyping
> `return` for `yield` like:
> 
>     @fixture
>     def db():
>         db = DB()
>         return db
>         db.clear()
> 
> Even worse, this fixture could still appear to work, until
> some later time, when they system runs out of file
> descriptors, for example.

I think this error is highly unlikely because "return" for
almost everybody marks the end of the function.

So for pytest-2.4 we are left with a choice between a new
"yield_fixture" decorator or passing a ``yieldctx=True``
to the existing one.  To make it easier for people to use
yield fixtures everywhere a decorator might be preferable.
You could write:

    from pytest import yield_fixture as fixture

and use yield style everywhere.  Not using yield in a 
yield_fixture then would get you an error.  Using
yield in a @pytest.fixture would work as before.

Originally i didn't want to go with a separate decorator
because it duplicates API and docstrings.  But maybe this can
be mediated by just saying "same as pytest.fixture but
use 'yield' instead of 'return" for providing a fixture instance, 
see http:/... for details."

Sounds like a plan?

holger
_______________________________________________
Pytest-dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pytest-dev

Reply via email to