为何在pytest中测试us_to_dec函数时出现AssertionError?
排查pytest抛出AssertionError的原因
首先,你的us_to_dec(205)计算逻辑是完全正确的:(205/100)+1=3.05,经过quantize(TWO)处理后确实会返回Decimal('3.05'),直接运行函数能得到预期结果,说明函数本身逻辑没问题。测试时出现AssertionError,大概率是以下几个常见问题导致的:
1. 用浮点数和Decimal对象直接比较
这是最容易踩的坑。你直接运行print(us_to_dec(205))看到的是3.05,但函数返回的是Decimal类型的精确值;如果你的测试用例里写了类似这样的断言:
assert us_to_dec(205) == 3.05
这里的3.05是浮点数,而浮点数在二进制存储中是近似值(比如3.05实际是一个接近但不等于精确3.05的数值),和Decimal的精确值直接比较必然会失败。
解决方案:
测试时用Decimal类型的预期值来做比较,比如:
from decimal import Decimal from conventer import us_to_dec def test_us_to_dec(): assert us_to_dec(205) == Decimal('3.05')
2. 测试文件的模块导入错误
你提到测试文件里写的是from surebet import co...,这里可能存在导入路径或模块名称的问题:
- 是不是拼写错误?比如你的模块是
conventer.py,但导入时写成了converter(少了一个n); - 是不是
surebet包下的conventer模块和你当前测试的conventer.py不是同一个文件?比如项目结构里有重名模块,导致测试调用的是另一个版本的函数。
解决方案:
- 检查导入语句的拼写是否完全匹配你的模块文件名,比如如果模块和测试文件在同一目录下,应该写
from conventer import us_to_dec; - 可以在测试函数里临时添加打印,确认调用的函数返回值是否符合预期:
def test_us_to_dec(): result = us_to_dec(205) print(f"实际返回值:{result},类型:{type(result)}") assert result == Decimal('3.05')
3. 测试用例的参数或预期值写错
虽然可能性较低,但也可以快速排查:
- 确认测试用例里传入的参数确实是
205,而不是其他类似值(比如200); - 确认预期值没有写错,比如是不是误写成了
3.5而不是3.05。
内容的提问来源于stack exchange,提问作者Kimmo Hintikka
相关产品推荐
相关产品推荐

