반응형
Django 1.8 업데이트-AttributeError : django.test.TestCase에 'cls_atomics'속성이 없습니다.
Django 1.7 프로젝트를 Django 1.8로 업데이트했고 이제 테스트를 실행할 때 오류가 발생합니다 (의 하위 클래스 django.test.TestCase
).
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'
테스트를 통해 디버그하면 문제없이 모든 행을 단계별로 실행할 수 있지만 마지막 행 이후에는 예외가 발생합니다.
다음은 예제 테스트입니다.
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)
내 환경 :
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
이 문제를 어떻게 해결할 수 있습니까?
그 이유는 setUpClass(cls)
클래스 메서드가 super를 호출하지 않기 때문이라고 생각합니다 . 그 때문에 django.tests.TestCase.setUpClass
호출되지 않고
cls.cls_atomics = cls._enter_atomics()
호출되지 않고 자연스럽게 cls_atomics
정의되지 않습니다.
에 추가 super(ATestTests, cls).setUpClass()
해야합니다 setUpClass
.
Django 1.8+ TestCase.setUpTestData
의 경우 TestCase.setUpClass
.
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')
문서는 여기에 있습니다 .
I had a similar problem where a TestCase
used setUpClass
but did not have a tearDownClass
method. My tests pass when I add an empty one:
@classmethod
def tearDownClass(cls):
pass
I also do not call django.setup
.
Here is the complete code with the call to the base class (as suggested by @J. C. Leitão):
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)
반응형
'Programing' 카테고리의 다른 글
HTTP 요청에서 JSON 데이터를 다시 받기 (0) | 2020.12.11 |
---|---|
객체의 모든 키를 소문자로 바꾸는 가장 좋은 방법 (가장 효율적)은 무엇입니까? (0) | 2020.12.11 |
암호 솔트를 "솔트"라고하는 이유는 무엇입니까? (0) | 2020.12.11 |
Rails Devise : 현재 로그인 한 사용자의 객체를 얻습니까? (0) | 2020.12.11 |
마지막 줄이 누락 된 쉘 스크립트 읽기 (0) | 2020.12.11 |