URLs 0% 的 Django 覆盖率测试,为啥?

Posted

技术标签:

【中文标题】URLs 0% 的 Django 覆盖率测试,为啥?【英文标题】:Django coverage test for URLs 0%, why?URLs 0% 的 Django 覆盖率测试,为什么? 【发布时间】:2014-11-12 00:19:07 【问题描述】:

使用 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%
----------------------------------------------------------------

这是我的 URL 测试之一...

url_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/')

【问题讨论】:

没有看到更多你的代码库,我不确定我能提供帮助;我可以确认移动我的一个项目(在 Django 1.6 上)以使用 django-nose,运行 python manage.py test --with-coverage 并进行测试 URL 会为我的 urls.py 生成正确的覆盖率报告;所以这似乎与您的代码/使用特别有关。 【参考方案1】:

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

$ coverage run nosetests.py ....

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

【讨论】:

我正在使用 Django Nose。但是,为什么其他测试可以,而不是这个?无论顺序如何,它都应该报告某些内容,除非我对 URL 的测试是错误的。 Coverage 只能测量开始覆盖后执行的代码。如果 Django Nose 在开始 coverage.py 之前导入(并因此执行)urls.py,那么您将看到 urls.py 报告为 0% 您是否尝试过按照我在答案中显示的那样在覆盖范围内运行测试? @Sputnik 您的测试表明您的 urls.py 已被导入和处理,但没有直接执行 urls.py 中的任何代码......正如 Ned 所说,Django 可能已经在测试运行器开始测量覆盖率之前已经处理了你的 urls.py @NedBatchelder 我已通过命令覆盖覆盖不可用

以上是关于URLs 0% 的 Django 覆盖率测试,为啥?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Cobertura 在通过 Eclipse 插件运行时报告 0% 覆盖率?

为啥logged_out.html在django注册中没有覆盖?

即使我添加了测试单元,sonarqube 的覆盖率也始终为 0%

如何对 django url 进行单元测试?

CoverStory 在运行 iPhone 应用程序后报告 0% 的覆盖率

为啥 404 在 django url 中?