2013-05-02 33 views
3

我们开始为我们的API编写单元测试(使用Django Rest Framework创建)。我们决定从简单的开始,使用内置的unittest和django.test.client类。我有写一个测试的存根,它运行得很好:只要我去掉这行:from django.test.client import Client我得到一个错误使用django.test.client测试应用http请求,获取错误

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from __future__ import absolute_import 
import unittest 

# from django.test.client import Client 

class TestGrowth(unittest.TestCase): 
    def setUp(self): 
     # self.client = Client() 
     pass 

    def test_numbers_3_4(self): 
     self.assertEqual(4, 4, True) 

    def test_strings_a_3(self): 
     self.assertEqual('andy', 'andy', True) 


def suite(): 
    suite = unittest.TestSuite() 

    # Add test cases to suite 
    suite.addTests(unittest.makeSuite(TestGrowth)) 

    return suite 

if __name__ == '__main__': 
    # Run test suite 
    unittest.TextTestRunner(verbosity=2).run(suite()) 

但是:

Traceback (most recent call last): 
    File "./AccountGrowth.py", line 8, in <module> 
    from django.test.client import Client 
    File "/home/vagrant/.virtualenvs/emmasocial/lib/python2.7/site-packages/django/test/__init__.py", line 5, in <module> 
    from django.test.client import Client, RequestFactory 
    File "/home/vagrant/.virtualenvs/emmasocial/lib/python2.7/site-packages/django/test/client.py", line 21, in <module> 
    from django.db import close_connection 
    File "/home/vagrant/.virtualenvs/emmasocial/lib/python2.7/site-packages/django/db/__init__.py", line 11, in <module> 
    if settings.DATABASES and DEFAULT_DB_ALIAS not in settings.DATABASES: 
    File "/home/vagrant/.virtualenvs/emmasocial/lib/python2.7/site-packages/django/conf/__init__.py", line 53, in __getattr__ 
    self._setup(name) 
    File "/home/vagrant/.virtualenvs/emmasocial/lib/python2.7/site-packages/django/conf/__init__.py", line 46, in _setup 
    % (desc, ENVIRONMENT_VARIABLE)) 
django.core.exceptions.ImproperlyConfigured: Requested setting DATABASES, but settings are not configured. 
You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings. 

我们定义在数据库中settings.py如下:

if "DATABASE_URL" in os.environ: 
    # Parse database configuration from $DATABASE_URL 
    DATABASES = { 
     'default': dj_database_url.config() 
    } 
else: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 
      'NAME': 'emmasocial',     # Or path to database file if using sqlite3. 
      'USER': 'root',      # Not used with sqlite3. 
      'PASSWORD': '',      # Not used with sqlite3. 
      'HOST': '',       # Set to empty string for localhost. Not used with sqlite3. 
      'PORT': '',       # Set to empty string for default. Not used with sqlite3. 
     } 
    } 

我从游民外壳中使用以下命令python ./AccountGrowth.py运行里面<app>/api/tests测试。

任何人都可以阐明为什么会发生这种情况?

回答

1

您并未通过Django的测试运行器运行测试,该测试运行器为您设置了所有这些测试运行器。您不需要if __name__ == '__main__'区块或明确呼叫run(),您应该通过./manage.py test运行测试。

+1

丹尼尔...目标是将这些作为大型套件的一部分来运行,但我只是开始进行单元测试。当我试着用'./manage.py test'从项目的根目录运行它时,它似乎没有相同的表现。 – commadelimited 2013-05-02 20:29:30

相关问题