Nosetests 和 Coverage 不排除线路

Nosetests and Coverage not excluding lines

运行 变成一个小问题,使用 nosetests 覆盖一些代码,用 Django web 应用程序覆盖。我创建了一个 .coveragerc 文件来排除大量代码(例如 class 声明),但我仍然得到一些奇怪的结果。

这是我的 .coveragerc 文件:

[run]
omit = ../*migrations*, ../*admin.py

[report]
show_missing = True
exclude_lines =
         pragma: no cover
         from
         = models\.

这是 models.py 个文件之一的示例:

from django.db import models

class Query(models.Model):
    variable1 = models.CharField(max_length=100)
    variable2 = models.CharField(max_length=100)
    variable3 = models.CharField(max_length=100)
    variable4 = models.CharField(max_length=100)
    variable5 = models.CharField(max_length=100)
    id = models.AutoField(primary_key=True)

def some_function(self):
     self.variable1 = self.variable2 + self.variable3 + self.variable4 + self.variable 5
     return self.variable1

所以当我 运行 代码覆盖率时,我 运行 遇到的问题是,尽管我告诉覆盖率明确排除任何带有字符串“= models.”的内容,它仍然说这些行是通过命令行给出的报告中缺少。这使得很难确定我在测试用例中实际上没有覆盖哪些行。谁能对此提供一些见解?

您的 .coveragerc 文件应列出要排除的内容,从目录的根目录开始。

例如:

proj
|-- app1
   |
   -- models.py
   -- migrations.py
|-- app2

那么您的 coverage.rc 文件应该如下所示:

[run]
omit = app1/migrations.py, app1/admin.py

[run]
omit = proj/*/migrations.py, proj/*/admin.py

找到了我的问题的解决方案。事实证明我根本不需要使用 nosetests 。我可以简单地 运行 coverage.pymanage.py 测试并通过测试模块。代码覆盖率非常好,我的覆盖率高达 96% :-)