如何用pytest断言类对象?解决内存地址变化的断言问题
正确实现类对象的断言与创建验证
当前测试的问题
- 未调用目标函数:
parameter = function_name只是引用了函数本身,没有执行函数逻辑,应改为parameter = function_name() - 硬编码内存地址不可靠:程序每次运行时,对象的内存地址都会随机分配,断言字符串匹配必然失败
正确的测试方案
1. 先修正原代码的错误
原other_class的__init__方法未接收参数,但调用时传入了file,会触发参数不匹配错误,先修正类定义:
class other_class(): def __init__(self, file): # 添加file参数 self.x = file self.y = {} # 其他方法...
2. 编写可靠的测试代码
测试应聚焦对象类型是否正确和属性状态是否符合预期,而非底层内存地址:
def test_function_name(): # 执行目标函数,获取返回的对象 parameter = function_name() # 验证对象是否成功创建(即返回值是other_class的实例) assert isinstance(parameter, other_class), "未成功创建other_class实例" # 验证对象的核心属性是否符合预期 assert parameter.x == "c:/desktop/test.txt", "实例的文件路径属性错误" # 可选:验证初始属性的默认值 assert parameter.y == {}, "实例的y属性初始值不符合预期"
额外说明
- 若仅需验证对象是否创建,仅用
isinstance断言即可满足需求 - 永远不要依赖包含内存地址的对象字符串表示做断言,这类信息完全不稳定
- 测试的核心是验证程序的行为和状态,而非底层实现细节
内容的提问来源于stack exchange,提问作者psw
相关产品推荐
相关产品推荐

