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

为什么Pytest在不同测试用例之间存在状态留存问题?

问题原因

你遇到的状态残留问题和pytest无关,是Python类属性和实例属性的使用错误导致的:
当前你在Dictionary类下直接定义的root = Word("")属于类属性,该属性属于Dictionary类本身,所有由这个类创建的实例都会共用同一个root对象。前面的测试用例调用insert方法修改了root.right的值后,后续所有新建的Dictionary实例访问到的都是被修改过的同一个root,所以才会出现新实例的root.right已经是test的情况。

修复方案

你只需要把root的定义移到Dictionary类的构造方法__init__中,让每个实例创建时都生成自己独立的root对象即可,修改后的Dictionary类代码如下:

#!/usr/bin/env python

class Word:
    def __init__(self, val: str, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

    def __repr__(self):
        return self.val

class Dictionary:
    def __init__(self):
        # 每个实例单独初始化自己的root,属于实例属性,实例之间互不影响
        self.root = Word("")

    def is_empty(self):
        return self.root.right is None

    def insert(self, val: str) -> None:
        print("here")
        new_node = Word(val)

        if self.root.right is None:
            self.root.right = new_node
        else:
            self.root.right.right = new_node

        return new_node

修改完成后重新运行测试,每个测试用例新建的Dictionary实例都会有自己独立的初始root对象,不会再出现之前测试状态残留的问题。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 12:54:03