如何在 unitttest 中保留从 TestCase
继承的同一对象中所做的更改?
from unittest import TestCase, main as unittest_main
class TestSimpleFoo(TestCase):
foo = 'bar'
def setUp(self):
pass
def test_a(self):
self.assertEqual(self.foo, 'bar')
self.foo = 'can'
def test_f(self):
self.assertEqual(self.foo, 'can')
if __name__ == '__main__':
unittest_main()
即:我希望上面的这两个测试通过
最佳答案
正如一些评论所回应的那样,以这种方式构建测试可能是测试本身的设计缺陷,您应该考虑重新构建它们。但是,如果您想这样做并依赖于您正在使用的测试运行程序按字母(看似)顺序执行它们的事实,那么我建议如下。
与@Matthias 所说的类似,但对于您以后可能决定从该类继承的情况,我会做不同的事情。
from unittest import TestCase, main as unittest_main
class TestSimpleFoo(TestCase):
foo = 'bar'
def setUp(self):
pass
def test_a(self):
self.assertEqual(self.__class__.foo, 'bar')
self.__class__.foo = 'can'
def test_f(self):
self.assertEqual(self.__class__.foo, 'can')
if __name__ == '__main__':
unittest_main()
此答案与您接受的@Matthias 答案之间的区别在于该类的显式声明与所述类引用的查找。
TestSimpleFoo vs self.__class__
我更喜欢动态性,因此我可以稍后继承测试并背靠背运行两个测试类,并且两者之间没有任何交叉。因为如果您选择从此类继承,显式命名类引用将导致两个测试类都针对该引用而不是它们各自的类运行。
关于python - 在unittest中的测试之间保持变量变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21447740/