Python单元测试备份静态

时间:2013-05-21 17:25:02

标签: python unit-testing static-members nose

我正在尝试在python中进行单元测试,但我遇到了静态属性的麻烦 问题是:Python不备份静态属性,这需要测试不可预测。这是一个示例代码:

def test1(self):
    self.assertIsNone(MyClass.var)
    Config.var = "It works"
    self.assertEquals("It works", MyClass.var)

def test2(self):
    self.assertIsNone(MyClass.var) # Fails
    Config.var = "It works really"
    self.assertEquals("It works really", MyClass.var)

在给定的情况下,我可以通过在第一次测试结束时或使用setUp()tearDown()重置值来避免这种情况,但在我的情况下不能(例如,这太难了) )。我想让脚本自动备份类的所有静态属性,就像我在PHP中习惯的那样。

我使用nose(nosetests path_to_tests)运行所有单元测试,但如果需要,我会切换“测试框架”。

1 个答案:

答案 0 :(得分:0)

我不确定你为什么要避免使用setup()和teardown()函数,但无论出于何种原因,是什么阻止你构建自己的伪设置函数?例如:

def test1(self):
    MyClass.prep()
    self.assertIsNone(MyClass.var)
    Config.var = "It works"
    self.assertEquals("It works", MyClass.var)

def test2(self):
    MyClass.prep(var="whatever")
    self.assertIsNone(MyClass.var) # Fails
    Config.var = "It works really"
    self.assertEquals("It works really", MyClass.var)

def prep(self, var="temp", var2="temp2"):
    MyClass.var = var
    MyClass.var2 = var2 

我之前已经做过这种情况,在某些情况下,我希望我的测试中的外部设备能够自我禁用。我刚刚构建了一个可以关闭它的函数,无论我想做什么测试,我都会运行“prep”函数来确保测试工作。然后,如果测试工作,就在完成之前,我会再次调用prep功能来重新打开设备。