鼻子覆盖范围的可疑差距

时间:2015-11-18 18:10:57

标签: python django code-coverage nose

我正在使用Nose和Django(以及django-nose),我收到一份非常奇怪的报道:

$ python3 manage.py test lists
nosetests lists --with-coverage --cover-package=lists,superlists --verbosity=1
Creating test database for alias 'default'...
............
Name                                          Stmts   Miss  Cover   Missing
---------------------------------------------------------------------------
lists.py                                          0      0   100%
lists\admin.py                                    0      0   100%
lists\migrations\0001_initial.py                  5      0   100%
lists\migrations\0002_item_text.py                5      0   100%
lists\migrations\0003_list.py                     5      0   100%
lists\migrations\0004_item_list.py                5      0   100%
lists\migrations\0005_auto_20151117_1835.py       5      0   100%
lists\migrations.py                               0      0   100%
lists\models.py                                   6      6     0%   1-12
lists\urls.py                                     3      0   100%
lists\views.py                                   23      0   100%
superlists.py                                     0      0   100%
superlists\settings.py                           19     19     0%   14-113
superlists\urls.py                                5      0   100%
---------------------------------------------------------------------------
TOTAL                                            81     25    69%
----------------------------------------------------------------------
Ran 12 tests in 0.073s

我的设置配置为:

TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'

NOSE_ARGS = [
    '--with-coverage',
    '--cover-package=lists,superlists',
]

这些显然是在阅读,因为它设法应用参数并查看我的listssuperlists(我正在使用Python书籍进行TDD)应用程序就好了。但是,出于某种原因,它说它没有覆盖任何settings.py文件或我的lists/models.py;非常简单的类,只有一些字段定义,没有函数,没有方法。如果是'根级' class在模块中并被导入,其所有类属性和方法签名(def x(...):行)都成功执行,否则会立即崩溃。

必须执行设置文件,否则Django甚至无法运行。为什么覆盖率报告和模型未命中?

1 个答案:

答案 0 :(得分:0)

最可能的答案是,在导入 设置文件后,django-nose会触发(因为manage.py test命令本身在运行测试之前运行django设置代码)。因此,在此设置过程中评估的任何代码都不包含在coverage结果中。

您可能需要查看相关问题的this answer,以获得更详细的说明。希望这有帮助!