我想使用self.attr
类unittest.TestCase
,但它似乎在测试之间不是持久的:
import unittest
class TestNightlife(unittest.TestCase):
_my_param = 0
def test_a(self):
print 'test A = %d' % self._my_param
self._my_param = 1
def test_b(self):
print 'test B = %d' % self._my_param
self._my_param = 2
if __name__ == "__main__":
unittest.main()
这给出了以下输出:
test A = 0
test B = 0
unittest.TestCase
的实例是否在测试运行之间发生变化?为什么呢?
答案 0 :(得分:9)
它的工作方式是因为unittest.main()为每个测试创建单独的对象(在这种情况下创建了两个对象)。
关于你的动机:测试不应该改变全球状态。您应该在tearDown中测试之前将全局状态恢复为状态或测试自身。如果测试正在改变全局状态,那么这将是一个非常棘手的问题,你将会陷入迟早无法预测的情况。
import unittest
class TestNightlife(unittest.TestCase):
_my_param = 0
def test_a(self):
print 'object id: %d' % id(self)
print 'test A = %d' % self._my_param
self._my_param = 1
def test_b(self):
print 'object id: %d' % id(self)
print 'test B = %d' % self._my_param
self._my_param = 2
if __name__ == "__main__":
unittest.main()
输出:
object id: 10969360
test A = 0
.object id: 10969424
test B = 0
.
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK