coverage.py是否衡量函数和类定义?

pra*_*een 17 python testing code-coverage

我试图实现基本python模块的100%覆盖率.我使用Ned Batchelder的coverage.py模块来测试它.

1 class account(object):
2   def __init__(self, initial_balance=0):
3     self.balance = initial_balance
4   def add_one(self):
5    self.balance = self.balance + 1
Run Code Online (Sandbox Code Playgroud)

这些是测试.

class TestAccount(unittest.TestCase):
  def test_create_edit_account(self):
    a = account1.account()
    a.add_one()
Run Code Online (Sandbox Code Playgroud)

这是我得到的报道报道.

    COVERAGE REPORT =
    Name                    Stmts   Miss  Cover   Missing
   -----------------------------------------------------
   __init__                    1      1     0%   1
   account1                    5      3    40%   1-2, 4
   account2                    7      7     0%   1-7

我们可以看到,第1-2和第4行未被覆盖,这些是定义.其余的行都被执行了.

jco*_*ado 20

我认为你的问题在FAQ中有描述:

问:为什么函数(或类)的主体显示为已执行,但def行不显示?

这是因为在定义函数后启动了coverage.定义行在没有覆盖测量的情况下执行,然后启动覆盖,然后调用该函数.这意味着身体被测量,但功能本身的定义不是.

要解决此问题,请提前开始报道.如果使用命令行以覆盖范围运行程序,则将监视整个程序.如果您使用的是API,则需要在导入定义函数的模块之前调用coverage.start().


Zul*_*ulu 5

以下是jcollado的回答:

我有Django鼻子的这个问题,它只涵盖了测试使用的线条.

为了解决这个问题,我首先启动manage.py了覆盖,然后启动了测试. .coverage文件将包含两个报告.

我的第一个命令是打印我的项目设置的自定义.例:

coverage run ./manage.py settings && ./manage.py test myapp
Run Code Online (Sandbox Code Playgroud)