unittest β Standard Library
Python
import unittest
def divide(a, b):
if b == 0:
raise ValueError("Cannot divide by zero")
return a / b
class TestMath(unittest.TestCase):
def test_divide_normal(self):
self.assertAlmostEqual(divide(10, 3), 3.333, places=3)
def test_divide_zero(self):
with self.assertRaises(ValueError):
divide(10, 0)
if __name__ == "__main__":
unittest.main()pytest β Industry Standard
Python
import pytest
def add(a, b):
return a + b
def test_add():
assert add(2, 3) == 5
@pytest.mark.parametrize("a,b,expected", [
(2, 3, 5),
(-1, 1, 0),
(0, 0, 0),
])
def test_add_parametrize(a, b, expected):
assert add(a, b) == expectedFixtures
Python
import pytest
import sqlite3
@pytest.fixture
def db():
conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)")
yield conn
conn.close()
def test_insert(db):
db.execute("INSERT INTO users VALUES (1, 'Alice')")
result = db.execute("SELECT name FROM users").fetchone()
assert result[0] == "Alice" Mocking
Python
from unittest.mock import patch, MagicMock
import requests
def fetch_user(user_id):
resp = requests.get(f"https://api.example.com/users/{user_id}")
return resp.json()
def test_fetch_user():
with patch("requests.get") as mock_get:
mock_get.return_value.json.return_value = {"id": 1, "name": "Bob"}
user = fetch_user(1)
assert user["name"] == "Bob" Bash
pytest -v --cov=mymodule # pip install pytest-covTip: Name tests test_what_when_expected() β e.g., test_divide_by_zero_raises_value_error. Failures become self-documenting.