Unit testing
What is it? Why do it?
Unit testing is a method for testing very specific aspects of a code base. The various different types of tests cover a wide range of use cases, for a quick intro take a look at RealPython’s article about unit testing: https://realpython.com/python-testing/#unit-tests-vs-integration-tests
How to manage
Our template makes use of pytest as the unit testing framework. You have the option to change that at any time, but you’ll need to make modifications in a few files:
pyproject.toml
.github/workflows/testing-and-coverage.yml
.github/workflows/smoke-test.yml
.pre-commit-config.yaml
Additionally, we advise that unit tests be placed in the ./tests
directory.
This is not a requirement, but the Continuous Integration and pre-commit checks
will only look in that directory for tests. If you decide to keep your tests
elsewhere, you should update the [tool.pytest.ini_options]
section in
pyproject.toml
with the new location so that CI and pre-commit will work as
expected.
It’s also worth noting that if you want to write exploratory tests as you develop
your code, but you do not want those tests to be included in automated test runs,
feel free to place those tests in a directory outside of the ./tests
directory.
Note that pytest
will recursively search subdirectories inside of ./tests
while searching for tests to run.