Pytest 如何断言浮点数近似相等(assertAlmostEqual)?
浮点数断言用 pytest.approx:assert result == pytest.approx(3.14, rel=1e-3)。支持绝对/相对误差、列表与字典。不要用 == 直接比浮点数。本文给出用法与误差参数。
用 pytest.approx:assert result == pytest.approx(3.14159, rel=1e-3)——浮点运算有精度误差,直接 == 比较几乎必然翻车。
基本用法
import pytest
def test_calculation():
result = 0.1 + 0.2
assert result == pytest.approx(0.3) # 默认相对误差 1e-6
# 自定义误差
assert value == pytest.approx(3.14, rel=1e-2) # 相对误差 1%
assert value == pytest.approx(3.14, abs=0.01) # 绝对误差 0.01
容器也支持
assert [1.1, 2.2] == pytest.approx([1.1, 2.2])
assert {'pi': 3.14159} == pytest.approx({'pi': 3.14}, rel=1e-3)
import numpy as np
assert np.array([1.0, 2.0]) == pytest.approx(np.array([1.0, 2.0]))
unittest 传统写法
self.assertAlmostEqual(result, 3.14, places=2) # 小数点后 2 位
self.assertAlmostEqual(result, 3.14, delta=0.01) # 或差值
常见问题(FAQ)
Q:approx 能断言不等吗? pytest 6.1+ 支持 assert x != pytest.approx(y)。
Q:NaN 怎么处理? pytest.approx(float('nan'), nan_ok=True)。