Skip to content

Instantly share code, notes, and snippets.

@garyvdm
Created May 12, 2014 19:18
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save garyvdm/392ae20c673c7ee58d76 to your computer and use it in GitHub Desktop.
Save garyvdm/392ae20c673c7ee58d76 to your computer and use it in GitHub Desktop.
Alternative to nost.tools.with_setup decorator, which allows arguments to be returned form the setup function, and passed to the test and teardown functions.
def with_setup_args(setup, teardown=None):
"""Decorator to add setup and/or teardown methods to a test function::
@with_setup_args(setup, teardown)
def test_something():
" ... "
The setup function should return (args, kwargs) which will be passed to
test function, and teardown function.
Note that `with_setup_args` is useful *only* for test functions, not for test
methods or inside of TestCase subclasses.
"""
def decorate(func):
args = []
kwargs = {}
def test_wrapped():
func(*args, **kwargs)
test_wrapped.__name__ = func.__name__
def setup_wrapped():
a, k = setup()
args.extend(a)
kwargs.update(k)
if hasattr(func, 'setup'):
func.setup()
test_wrapped.setup = setup_wrapped
if teardown:
def teardown_wrapped():
if hasattr(func, 'teardown'):
func.teardown()
teardown(*args, **kwargs)
test_wrapped.teardown = teardown_wrapped
else:
if hasattr(func, 'teardown'):
test_wrapped.teardown = func.teardown()
return test_wrapped
return decorate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment