Python Django对URL的覆盖率测试为0%,为什么?

Python Django对URL的覆盖率测试为0%,为什么?,python,django,django-testing,coverage.py,python-coverage,Python,Django,Django Testing,Coverage.py,Python Coverage,使用Django鼻。我对我的URL进行了测试,但覆盖率仍然为我的URL提供0%,为什么 python manage.py测试配置文件 这是我的报道: Name Stmts Miss Cover Missing ---------------------------------------------------------------- profiles 0

使用Django鼻。我对我的URL进行了测试,但覆盖率仍然为我的URL提供0%,为什么

python manage.py测试配置文件

这是我的报道:

Name                               Stmts   Miss  Cover   Missing
----------------------------------------------------------------
profiles                               0      0   100%
profiles.migrations                    0      0   100%
profiles.migrations.0001_initial       6      0   100%
profiles.models                        0      0   100%
profiles.urls                          4      4     0%   1-9
----------------------------------------------------------------
TOTAL                                 10      4    60%
----------------------------------------------------------------
$ coverage run nosetests.py ....
这是我的URL测试之一

url\u tests.py

import nose.tools as noz
from django.test import TestCase
from django.core.urlresolvers import resolve, reverse

class URLsTest(TestCase):

    def test_user_list(self):
        url = reverse('api_user_list', args=[])
        noz.assert_equal(url, '/api/user/')

通常这与coverage.py在过程中启动太晚有关。确保尽早启动的最简单方法是在覆盖范围内运行测试运行程序:

Name                               Stmts   Miss  Cover   Missing
----------------------------------------------------------------
profiles                               0      0   100%
profiles.migrations                    0      0   100%
profiles.migrations.0001_initial       6      0   100%
profiles.models                        0      0   100%
profiles.urls                          4      4     0%   1-9
----------------------------------------------------------------
TOTAL                                 10      4    60%
----------------------------------------------------------------
$ coverage run nosetests.py ....

url.py的一个相关细节:它只包含导入时执行的代码。因此,整个文件在Django启动并导入URL.py时执行。这与大多数文件不同,这些文件定义的类或函数的主体稍后执行。

我使用的是Django Nose。然而,为什么其他的测试都可以,而不是这个呢?无论顺序如何,它都应该报告一些内容,除非我对URL的测试有误。覆盖率只能测量在覆盖率启动后执行的代码。如果Django Nose在启动coverage.py之前导入(并因此执行)urls.py,那么您将看到URL.py的报告率为0%。您是否尝试过在覆盖率下运行测试,如我在答案中所示?@Sputnik您的测试显示您的urls.py已导入和处理,但没有直接执行urls.py中的任何代码。。。正如Ned所说,Django可能在测试运行者开始测量之前已经处理了您的URL.pycoverage@NedBatchelder我已经通过命令安装了coverage,coverage不可用。如果没有看到更多的代码库,我不确定我是否能提供帮助;我可以确认,将我的一个项目(在Django 1.6上)移动到使用Django nose,运行python manage.py test——使用覆盖率,并使用一个测试来测试URL,可以为我的URL.py生成正确的覆盖率报告;因此,这可能与您的代码/用法有关。