hab*_*kuk 60 django python-3.x django-1.8
我将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'
Run Code Online (Sandbox Code Playgroud)
如果我通过测试进行调试,我可以毫无问题地遍历所有行,但是在最后一行之后抛出异常.
这是一个示例测试:
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)
Run Code Online (Sandbox Code Playgroud)
我的环境:
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
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?
Jor*_*tao 105
我相信原因是你的setUpClass(cls)类方法不是超级调用.因此,django.tests.TestCase.setUpClass不被称为和
cls.cls_atomics = cls._enter_atomics()
Run Code Online (Sandbox Code Playgroud)
没有被调用,自然导致cls_atomics未定义.
你应该加入super(ATestTests, cls).setUpClass()你的setUpClass.
sed*_*nym 29
对于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')
Run Code Online (Sandbox Code Playgroud)
文档在这里.
我有一个类似的问题,其中TestCase使用过setUpClass但没有tearDownClass方法。当我添加一个空的测试时,我的测试通过了:
@classmethod
def tearDownClass(cls):
pass
Run Code Online (Sandbox Code Playgroud)
我也不打电话django.setup。
| 归档时间: |
|
| 查看次数: |
7710 次 |
| 最近记录: |