Testing Calculations
Best practices for testing financial calculations.
Basic Test Structure
import pytest
from metricengine import Money, Percentage
def test_roi_calculation():
revenue = Money(120, "USD")
cost = Money(100, "USD")
result = roi(revenue, cost)
assert result == Percentage(20)
Edge Cases
def test_roi_zero_cost():
revenue = Money(100, "USD")
cost = Money(0, "USD")
with pytest.raises(ZeroDivisionError):
roi(revenue, cost)
Parameterized Tests
@pytest.mark.parametrize("revenue,cost,expected", [
(Money(120, "USD"), Money(100, "USD"), Percentage(20)),
(Money(100, "USD"), Money(100, "USD"), Percentage(0)),
(Money(80, "USD"), Money(100, "USD"), Percentage(-20)),
])
def test_roi_cases(revenue, cost, expected):
assert roi(revenue, cost) == expected
Policy Testing
def test_roi_with_strict_policy():
with strict_policy():
# Test behavior under strict policy
pass