testing.decorators

Module: testing.decorators

Decorators for labeling test objects.

Decorators that merely return a modified version of the original function object are straightforward. Decorators that return a new function object need to use nose.tools.make_decorator(original_function)(decorator) in returning the decorator, in order to preserve metadata such as function name, setup and teardown functions and so on - see nose.tools for more information.

This module provides a set of useful decorators meant to be ready to use in your own tests. See the bottom of the file for the ready-made ones, and if you find yourself writing a new one that may be of generic use, add it here.

NOTE: This file contains IPython-specific decorators and imports the numpy.testing.decorators file, which we’ve copied verbatim. Any of our own code will be added at the bottom if we end up extending this.

Functions

IPython.testing.decorators.apply_wrapper(wrapper, func)

Apply a wrapper to a function for decoration.

This mixes Michele Simionato’s decorator tool with nose’s make_decorator, to apply a wrapper in a decorator so that all nose attributes, as well as function signature and other properties, survive the decoration cleanly. This will ensure that wrapped functions can still be well introspected via IPython, for example.

IPython.testing.decorators.make_label_dec(label, ds=None)

Factory function to create a decorator that applies one or more labels.

Parameters:label : string or sequence One or more labels that will be applied by the decorator to the functions

it decorates. Labels are attributes of the decorated function with their value set to True.

Keywords:ds : string An optional docstring for the resulting decorator. If not given, a default docstring is auto-generated.
Returns:A decorator.
Examples:

A simple labeling decorator: >>> slow = make_label_dec(‘slow’) >>> print slow.__doc__ Labels a test as ‘slow’.

And one that uses multiple labels and a custom docstring: >>> rare = make_label_dec([‘slow’,’hard’], ... “Mix labels ‘slow’ and ‘hard’ for rare tests.”) >>> print rare.__doc__ Mix labels ‘slow’ and ‘hard’ for rare tests.

Now, let’s test using this one: >>> @rare ... def f(): pass ... >>> >>> f.slow True >>> f.hard True

IPython.testing.decorators.numpy_not_available()

Can numpy be imported? Returns true if numpy does NOT import.

This is used to make a decorator to skip tests that require numpy to be available, but delay the ‘import numpy’ to test execution time.

IPython.testing.decorators.skip(msg=None)

Decorator factory - mark a test function for skipping from test suite.

Parameters:
msg : string

Optional message to be added.

Returns:
decorator : function

Decorator, which, when applied to a function, causes SkipTest to be raised, with the optional message added.

IPython.testing.decorators.skipif(skip_condition, msg=None)

Make function raise SkipTest exception if skip_condition is true

Parameters:

skip_condition : bool or callable.

Flag to determine whether to skip test. If the condition is a callable, it is used at runtime to dynamically make the decision. This is useful for tests that may require costly imports, to delay the cost until the test suite is actually executed. msg : string

Message to give on raising a SkipTest exception

Returns:

decorator : function

Decorator, which, when applied to a function, causes SkipTest to be raised when the skip_condition was True, and the function to be called normally otherwise.

Notes

You will see from the code that we had to further decorate the decorator with the nose.tools.make_decorator function in order to transmit function name, and various other metadata.