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

时间:2013-08-12 13:11:25

标签: 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在测试之间持续存在。我在这里做错了什么,我怎样才能达到预期的行为?

1 个答案:

答案 0 :(得分:3)

这与您编写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失败。