A T*_*A T 39 python persistence unit-testing testcase python-unittest
如何在从TestCase
unitttest 继承的同一对象中保留更改?
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()
Run Code Online (Sandbox Code Playgroud)
即:我希望上面的两个测试通过
rdp*_*rdp 48
正如一些评论所反映的那样,以这种方式构建测试可能是测试本身的设计缺陷,您应该考虑重构它们.但是,如果你想这样做并依赖于你正在使用的测试运行器以字母(看似)顺序执行它们的事实,那么我建议如下.
与@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()
Run Code Online (Sandbox Code Playgroud)
这个答案与你接受的@Matthias的答案之间的区别在于该类的明确声明与所述类引用的查找.
TestSimpleFoo vs self.__class__
Run Code Online (Sandbox Code Playgroud)
我更喜欢动态性,所以我可以在以后继承测试并连续运行两个测试类,并且两者之间没有任何交叉.因为如果您选择从此类继承,则显式命名类引用将导致两个测试类针对该引用而不是它们各自的类运行.
我喜欢你自己的答案简单,但如果你想保持不同的单元测试:
显然,unittest使用TestCase的新实例运行单独的测试.好吧,只需将要持久化的对象绑定到除了self之外的其他东西.例如:
from unittest import TestCase, main as unittest_main
class TestSimpleFoo(TestCase):
def setUp(self):
pass
def test_a(self):
TestSimpleFoo.foo = 'can'
def test_f(self):
self.assertEqual(TestSimpleFoo.foo, 'can')
if __name__ == '__main__':
unittest_main()
Run Code Online (Sandbox Code Playgroud)
您可能也会参与setUpClass和tearDownClass:https://docs.python.org/3/library/unittest.html#setupclass-and-teardownclass
还要注意单元测试的执行顺序:https: //docs.python.org/2/library/unittest.html#unittest.TestLoader.sortTestMethodsUsing