[py-dev] RFC for (hopefully) final commments on pytest-2.3 API

Ronny Pfannschmidt Ronny.Pfannschmidt at gmx.de
Tue Sep 18 21:56:35 CEST 2012

Hi Holger,

the proposed class centric convenience protocol
strikes me as strange/odd/confusing
- i'd like to avoid to be finalized on such an api

the rest of the changes looks reasonable/good

-- Ronny

On 09/18/2012 03:14 PM, holger krekel wrote:
> Hi Brianna, Floris, Carl, Ronny, all,
> first, let me thank for all the useful feedback you already provided.
> I am back trying to finalize the next pytest release -- FYI trunk is actually
> fully functional and implements all previously discussed features.
> However, I am still pondering Brianna's feedback (that that she found it
> surprising that there is a @pytest.setup but no teardown) and a few
> other little naming and protocol issues.  If you find some time to state
> your opinion on one or another issue i'd very much appreciate it:
> - rename @pytest.setup to @pytest.fixture and the docs would talk
>    about fixture instead of setup functions. (See
>    http://pytest.org/dev/setup.html for the current docs)
>    This would induce less of a question about @pytest.teardown?!
> - rename @pytest.factory to @pytest.funcarg - because with pytest-trunk
>    it's already the case that the former pytest_funcarg__NAME is just
>    a shortcut - there is no internal distinction anymore if you use
>    the decorator or the prefix or both.  Removing the "pytest_funcarg__" prefix
>    and using a @pytest.funcarg(...) declaration looks naturally related?!
> - introduce a "resource-centric" convenience protocol for fixtures and
>    funcarg factories.  It would be used if you decorate a class instead of
>    a function and would lead to the calling of (optional) setup/teardown
>    methods. Here is an example:
>      # content of test_module.py
>      import pytest
>      @pytest.funcarg
>      class db:
>          def setup(self, funcarg1, funcarg2):
>              # called during the setup phase of each test using the "db"
>              # funcarg.  this setup function will be called multiple
>              # times in case db.params is defined
>          def teardown(self):
>              # called during the teardown phase of a test which
>              # previously saw a successful db.setup() call
> - moreover, there could optionally be a class-method "configure" which is
>    called ahead of any setup() and would allow to dynamically compute the scope
>    and params attribute and influence them e. g. from command line options::
>      @pytest.funcarg
>      class db:
>          @classmethod
>          def configure(cls, config):
>              scope = config.option.scope
>              params = ...
>          ...
>    Dynamic scoping/parametrization is used today if you want to have
>    broadly-scoped less-parametrized resources during development but
>    use more function-scope more-parametrized resources during CI runs.
> - the same class convenience protocol would work for fixtures:
>      import pytest
>      @pytest.fixture
>      class transact:
>          def setup(self, db):
>              db.begin()
>              self.db = db
>          def teardown(self):
>              self.db.commit()
> best,
> holger
> _______________________________________________
> py-dev mailing list
> py-dev at codespeak.net
> http://codespeak.net/mailman/listinfo/py-dev

More information about the Pytest-dev mailing list