Update to Django 1.8 - AttributeError: django.test.TestCase has no attribute 'cls_atomics'
我将django 1.7项目更新为django1.8,现在在运行测试时出错(这是
1 2 3 4 | Traceback (most recent call last): File"env\lib\site-packages\django\test\testcases.py", line 962, in tearDownClass cls._rollback_atomics(cls.cls_atomics) AttributeError: type object 'SomeTests' has no attribute 'cls_atomics' |
如果我通过测试进行调试,那么我可以毫无问题地单步执行所有行,但是在最后一行之后会抛出异常。
这是一个示例测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import django import unittest from django.test import TestCase import logging import sys from builtins import classmethod, isinstance class ATestTests(TestCase): @classmethod def setUpClass(cls): django.setup() logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) def setUp(self): self._app = Application(name="a") def testtest(self): self.assertIsNotNone(self._app) |
我的环境:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | astroid==1.3.4 colorama==0.3.3 defusedxml==0.4.1 Django==1.8 django-extensions==1.5.2 django-filter==0.9.2 djangorestframework==3.0.5 djangorestframework-xml==1.0.1 eight==0.3.0 future==0.11.4 logilab-common==0.63.2 Markdown==2.5.2 pylint==1.4.1 python-dateutil==2.4.1 python-mimeparse==0.1.4 six==1.9.0 xmltodict==0.9.2 |
我怎么修这个?
型
我认为原因是您的
1 | cls.cls_atomics = cls._enter_atomics() |
不调用,自然导致
你应该把
型
对于django 1.8+,应该使用
1 2 3 4 5 6 7 8 9 | class MyTests(TestCase): @classmethod def setUpTestData(cls): # Set up data for the whole TestCase cls.foo = Foo.objects.create(bar="Test") def test1(self): self.assertEqual(self.foo.bar, 'Test') |
。
文件在这里。
型
我有一个类似的问题,一个
1 2 3 | @classmethod def tearDownClass(cls): pass |
我也不叫
型
下面是调用基类的完整代码(如@j.c.leit建议的那样)?o):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import django import unittest from django.test import TestCase import logging import sys from builtins import classmethod class ATestTests(TestCase): @classmethod def setUpClass(cls): super(ATestTests, cls).setUpClass() django.setup() logging.basicConfig(stream=sys.stderr, level=logging.DEBUG) def setUp(self): self._app = Application(name="a") def testtest(self): self.assertIsNotNone(self._app) |
号