Writing and Running Testsο
π§ͺ This guide explains how to write and run tests using
pytest, following the structure used in the template-project.
Writing good tests helps you avoid bugs, refactor safely, and ensure your code does what you expect β even weeks or months later.
π Where Tests Goο
All test code lives in the tests/ directory at the root of the project.
Each Python file in this folder starts with
test_Each test function inside starts with
test_You can organize tests by topic or module:
test_utils.py,test_readers.py, etc.
βοΈ Writing Your First Testο
Tests are written as plain Python functions and typically use assertions to check behavior:
# tests/test_math.py
def test_addition():
assert 1 + 1 == 2
To test your own project modules, just import them like normal:
# tests/test_tools.py
from template_project.tools import convert_units
def test_convert_units_basic():
result = convert_units(10, "m", "km")
assert result == 0.01
π‘ All test functions must start with
test_sopytestcan discover them.
βΆοΈ Running Tests Locallyο
Make sure youβve installed the dev dependencies:
pip install -r requirements-dev.txt
Then run:
pytest
This will automatically find and run any test_*.py files under the tests/ folder.
To run a specific test file:
pytest tests/test_tools.py
To run a specific test function:
pytest tests/test_tools.py::test_convert_units_basic
π Recommended Conventionsο
Group related tests by file (e.g.
test_utilities.py,test_standardise.py)Name test functions to reflect what they check (e.g.
test_raises_on_invalid_units)Use fixtures or test classes to share setup code when needed
Keep each test focused on one thing
π Checking Test Coverageο
You can use pytest-cov to measure how much of your code is covered by tests.
1. Install the extra dev dependency:ο
Make sure this line is in your requirements-dev.txt:
pytest-cov
Then install:
pip install -r requirements-dev.txt
2. Run tests with coverage:ο
pytest --cov=template_project
This will show a summary of test coverage by file.
To generate an HTML report:
pytest --cov=template_project --cov-report=html
Then open the htmlcov/index.html file in your browser to view a coverage dashboard.
π Files with low coverage help you find missing tests.
If youβre using pre-commit hooks, you can configure them to run pytest before each commit. This helps you catch test failures early.
Summary Cheatsheetο
Task |
Command |
|---|---|
Run all tests |
|
Run specific test file |
|
Run specific test |
|
Install test tools |
|
β Tests help you make confident changes. Use them early, and use them often!