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%