You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:22:40