Update to Django 1.8 - AttributeError: django.test.TestCase has no attribute 'cls_atomics'

后端 未结 4 1280
既然无缘
既然无缘 2021-02-11 11:41

I updated a Django 1.7 project to Django 1.8 and now get errors when I run the tests (that are subclasses of django.test.TestCase).

Traceback (most          


        
相关标签:
4条回答
  • 2021-02-11 12:20

    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.

    0 讨论(0)
  • 2021-02-11 12:22

    For Django 1.8+, you should use TestCase.setUpTestData instead of 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') 
    

    The documentation is here.

    0 讨论(0)
  • 2021-02-11 12:26

    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)
    
    0 讨论(0)
  • 2021-02-11 12:38

    I believe the reason is that your setUpClass(cls) class method is not calling super. Because of that, django.tests.TestCase.setUpClass is not called and

    cls.cls_atomics = cls._enter_atomics()
    

    is not called, naturally causing cls_atomics to be undefined.

    You should add super(ATestTests, cls).setUpClass() to your setUpClass.

    0 讨论(0)
提交回复
热议问题