Skip to main content
 首页 » 编程设计

python之为什么 django-nose 运行测试两次

2024年08月30日38lvdongjie

我有以下模型:

class Poll(models.Model): 
 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField(auto_now_add=True) 
 
    def __unicode__(self): 
             return self.question 

和以下测试

from polls.models import Poll 
from django.test import TestCase 
from django.utils import timezone 
 
class PollModelTest(TestCase): 
 
    def test_poll_save(self): 
        q = "What is the best OS?" 
        pd = timezone.now() 
        p = Poll(question=q, 
                 pub_date=pd) 
        p.save() 
        polls = Poll.objects.all() 
        self.assertEquals(polls.count(), 1) 
        self.assertEquals(polls[0].question, q) 

以及以下设置:

INSTALLED_APPS = ( 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    # Uncomment the next line to enable the admin: 
     'django.contrib.admin', 
    # Uncomment the next line to enable admin documentation: 
    # 'django.contrib.admindocs', 
    'polls', 
    'django_nose', 
 
) 
 
TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 
NOSE_ARGS = [ 
    '--with-coverage', 
    '--cover-package=polls', 
    '--with-progressive', 
    '--verbosity=0', 
    '--with-fixture-bundling', 
]  

当我尝试 python manage.py test polls 时,测试运行了两次。以下是输出:

Creating test database for alias 'default'... 
Name           Stmts   Miss  Cover   Missing 
-------------------------------------------- 
polls              0      0   100%    
polls.models       6      0   100%    
-------------------------------------------- 
TOTAL              6      0   100%    
 
OK!  2 tests, 0 failures, 0 errors in 0.0s 
Destroying test database for alias 'default'... 

但是,当我尝试不使用 TEST_RUNNER = 'django_nose.NoseTestSuiteRunner' 时,测试仅运行一次。以下是输出:

Creating test database for alias 'default'... 
. 
---------------------------------------------------------------------- 
Ran 1 test in 0.002s 
 
OK 
Destroying test database for alias 'default'... 

请告诉我哪里出了问题? 为什么 django-nose 会运行两次测试?

OT:对于相同的模型,django_nose 比 unittest 花费更多的时间。

编辑:

文件夹结构如下:

├── database.sqlite 
├── manage.py 
├── mysite 
│   ├── __init__.py 
│   ├── settings.py 
│   ├── templates 
│   │   ├── 404.html 
│   │   ├── 500.html 
│   │   └── base.html 
│   ├── urls.py 
│   └── wsgi.py 
└── polls 
    ├── __init__.py 
    ├── models.py 
    ├── tests 
    │   ├── __init__.py 
    │   └── test_models.py 
    ├── urls.py 
    └── views.py 

请您参考如下方法:

可能您将测试导入了两次。您没有显示您的文件结构,但也许您在单独的文件中进行了此测试,而不是在 tests.py 或类似文件中执行 import。