python - 如何在 Python 的单元测试设置阶段实例化对象

标签 python unit-testing testing nose

我一直在使用 Python 进行单元测试,但无法弄清楚我应该如何在设置阶段实例化我想要测试的对象,并最终为每个测试生成一个新对象。 例如,我有以下要测试的类:

class Cfg():
    data = {}

    def set(self, key, value):
        self.data[key] = value

    def get(self, key):
        return self.data.get(key, None)

对于每个单元测试,我想要一个新实例化的 Cfg 对象。我的测试看起来像这样:

from cfg import Cfg

class TestCfg():
    def setup(self):
        self.cfg = Cfg()

    def teardown(self):
        self.cfg = None

    def test_a(self):
        self.cfg.set('foo', 'bar')
        assert self.cfg.get('foo') == 'bar'

    def test_b(self):
        assert self.cfg.get('foo') == 'bar'

我不明白为什么 test_b 通过了。我期望 setuptearDown 来“重置”我的 cfg 实例,但似乎 cfg 在测试之间持续存在.我在这里做错了什么以及如何实现预期的行为?

最佳答案

这与您编写Cfg 类的方式有关。将 data 初始化移动到 __init__ 方法中:

class Cfg():
    def __init__(self):
        self.data = {}

    def set(self, key, value):
        self.data[key] = value

    def get(self, key):
        return self.data.get(key, None)

而且,您会看到失败的 test_b

关于python - 如何在 Python 的单元测试设置阶段实例化对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18187890/

相关文章:

python - pandas matplotlib .plot(kind ='hist') vs .plot(kind ='bar') 问题

python - 在 Python 中将当前时间提前一小时

apache-flex - 是否有编写好的单元测试的优秀示例 Flex 项目?

javascript - 使用 PouchDB 服务 promise 进行 AngularJS 单元测试

python - 如何模拟需要 Response 对象的 pydantic BaseModel?

python - Python3从网页读取文本文件

python - Pandas 与可变列数的比较

unit-testing - 我是否应该在类中添加功能只是为了使其可测试?

mysql - 第一个查询行为不稳定

testing - 如何使用 ArchUnit 忽略测试类中的类