【问题标题】:django unittest throws exceptionsdjango unittest 抛出异常
【发布时间】:2018-10-07 01:26:59
【问题描述】:

我有问题。当我在 Django 中创建非常简单的测试时,我有这样的异常:

import unittest 
from django.test import Client

class ModelTest(unittest.TestCase):

    def setUp(self):
        self.client = Client()

    def test_basic(self):
        response = self.client.get('/login/')
        self.assertEqual(response.status_code, 200)

我得到的错误是:

FAILED (errors=1)

Traceback (most recent call last):
  File "C:\Python27\lib\unittest\case.py", line 329, in run
    testMethod()
  File "C:\inetpub\wwwroot\portal\ateris\portal\module\RiskCard\tests\test_models.py", line 11, in test_basic
response = self.client.get('/login/')
  File "C:\Python27\lib\site-packages\django\test\client.py", line 500, in get
**extra)
  File "C:\Python27\lib\site-packages\django\test\client.py", line 303, in get
return self.generic('GET', path, secure=secure, **r)
  File "C:\Python27\lib\site-packages\django\test\client.py", line 358, in generic
data = force_bytes(data, settings.DEFAULT_CHARSET)
  File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 48, in __getattr__
self._setup(name)
  File "C:\Python27\lib\site-packages\django\conf\__init__.py", line 42, in _setup
% (desc, ENVIRONMENT_VARIABLE))

ImproperlyConfigured: Requested setting DEFAULT_CHARSET, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

我不知道我做错了什么。我使用unittest 文档。

我正在使用 PyCharm

Python 版本:2.7.12

Django 版本:1.8.5

【问题讨论】:

  • 您是否阅读了错误信息?并相应地更新了内容?
  • 您究竟输入了什么来运行测试?
  • @DanielRoseman 在 PyCharm 中“运行”
  • 好吧,那行不通。要么使用对 Django 的特定 PyCharm 支持(我认为仅在企业版中),要么通过 manage.py test 从 shell 运行它们。

标签: python django


【解决方案1】:

把你的代码改成

from django.test import TestCase
from .models import Client

class UserTestCase(TestCase):
    def setUp(self):
        test_client = Client.objects.get(id=[ClientsID])
    def test_basic(self):
        response = self.client.get('/login/')
        self.assertEqual(response.status_code, 200)  

您的错误之处在于您定义了self.client = Client(),然后在包含查询时使用了self.client.get('/login/')

【讨论】:

  • import unittest a django.test import TestCase 有什么区别?客户不是我模型中的对象。我用它来模拟 URL 上的 GET 和 POST 请求并观察响应。
【解决方案2】:

默认djangoTestCase继承python单元TestCase并扩展它的功能以加快单元测试的过程。默认提供客户端。

from django.test import TestCase

class ModelTest(TestCase):

    def test_basic(self):
        response = self.client.get('/login/')
        self.assertEqual(response.status_code, 200)

参考:https://docs.djangoproject.com/en/2.0/topics/testing/advanced/#tests-and-multiple-host-names

【讨论】:

    【解决方案3】:

    稍微修改一下,就可以了:

    from django.test import TestCase
    
    class ModelTest(TestCase):
    
        def setUp(self):
            self.client = Client()
    
        def test_basic(self):
            response = self.client.get('/login/')
            self.assertEqual(response.status_code, 200)
    

    一切都会像魅力一样发挥作用。如果您想知道这些差异。访问here

    希望这可以澄清你的理解。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-22
      相关资源
      最近更新 更多