1. ホーム
  2. django

[解決済み] Django 1.8 に更新 - AttributeError: django.test.TestCase には 'cls_atomics' という属性がありません。

2023-06-07 21:04:56

質問

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 .