Testing
Setting up testing with pytest and uv
Creating a Project with Tests
uv init myapp --package
d myapp
This creates a Python package project with the following structure:
myapp/
├── pyproject.toml
├── README.md
└── src
└── myapp
└── __init__.py
Adding pytest as a Development Dependency
Add pytest to your project’s development dependencies:
uv add --dev pytest
This command:
Updates your
pyproject.toml
with pytest as a development dependencyCreate the project’s lockfile
Installs pytest in your project’s virtual environment
Creating a Simple Module to Test
Let’s create a simple calculator module to test.
Create a new file at src/myapp/calculator.py
:
def add(a, b):
return a + b
def subtract(a, b):
return a - b
def multiply(a, b):
return a * b
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
Creating Test Files
Create a tests
directory at the root of your project
Now, create a test file for our calculator module in tests/test_calculator.py:
import pytest
from myapp.calculator import add, subtract, multiply, divide
def test_add():
assert add(1, 2) == 3
assert add(-1, 1) == 0
assert add(-1, -1) == -2
def test_subtract():
assert subtract(3, 2) == 1
assert subtract(2, 3) == -1
assert subtract(0, 0) == 0
def test_multiply():
assert multiply(2, 3) == 6
assert multiply(-2, 3) == -6
assert multiply(-2, -3) == 6
def test_divide():
assert divide(6, 3) == 2
assert divide(6, -3) == -2
assert divide(-6, -3) == 2
def test_divide_by_zero():
with pytest.raises(ValueError):
divide(5, 0)
Configuring pytest
Let’s configure pytest in your pyproject.toml file by adding these settings:
[tool.pytest.ini_options]
log_cli = true
testpaths = ["tests"]
python_files = "test_*.py"
python_functions = "test_*"
addopts = ["-v", "--strict-markers"]
pythonpath = ["."]
This configuration:
Sets the test discovery path to the
tests
directorySpecifies that test files should start with
test_
Specifies that test functions should start with
test_
Running Tests
Now you can run your tests using uv:
uv run pytest
To see more detailed output, use the verbose flag:
uv run pytest --cov=testing_demo
For a more detailed report:
uv run pytest --cov=testing_demo --cov-report=term-missing
To test a specific test case in a test file
uv run pytest tests/integration/agent/test_basic.py::test_basic
Last updated
Was this helpful?