Adding Tests#

Ensure you have installed the development dependencies by following the instructions in the installation guide. To run all tests, use the following command:

invoke test

PyTest#

Tests can be added to the tests directory. PyTest will automatically discover and run these tests. They should be named test_*.py, and the test functions should be named test_*. See the PyTest documentation for more information.

Use PyTest style tests for parameterised tests, tests that require fixtures, and tests that require setup.

These tests can be run with:

pytest

Or to run a specific test

pytest tests/test_*.py

Or to run with the same configuration as continuous integration:

invoke test.pytest

Doctest#

Doctest allows you to write tests directly in the docstrings of your code, making it easier to keep documentation up-to-date. The tests are written as examples in a Python interactive shell.

Use doctest style tests to document code with simple tested examples.

Here’s an example of a function with a doctest:

def hello_world():
    """
    >>> hello_world()
    Hello, World!
    """
    print("Hello, World!")

You can run this test with:

pytest --doctest-modules path/to/your/module.py

Alternatively, you can run all unit tests with the same configuration as continuous integration:

invoke test.doctest

Notebooks#

We use nbmake to test that all notebooks in the notebooks directory run without error. This ensures that the notebooks are always up-to-date and working correctly.

You can run a notebook as a test with:

pytest --nbmake notebooks/my_notebook.ipynb

# Often the examples take too long to run regularly as tests. To speed up testing some
# notebooks use the `NB_FAST` environment variable to run the notebook faster by using
# smaller datasets or fewer iterations. To run them in this mode use:
NB_FAST=true pytest --nbmake notebooks/my_notebook.ipynb

For more about NB_FAST read the notebooks documentation.