排除覆盖范围内的私有方法

时间:2017-02-04 23:33:35

标签: python coverage.py

有没有办法在测试覆盖范围内排除私有方法?

在我的.coveragerc中我尝试过:

[report]
exclude_lines = 
    __*

但它似乎排除了诸如long_method_name

之类的方法

在没有列出所有方法的情况下,有没有办法呢?

修改

我希望在测试中将__add__等具有simillar语法的方法设为

2 个答案:

答案 0 :(得分:4)

来自docs

class MyObject(object):
    def __init__(self):
        blah1()
        blah2()

    def __repr__(self): # pragma: no cover
        return "<MyObject>"

使用一个配置选项排除所有私有方法对IMO​​没有意义 - 如果查看覆盖率结果,则会导致错误的假设。

答案 1 :(得分:2)

您的正则表达式为__*,它与一个或多个下划线匹配,因此它会排除任何包含下划线的行。这不是你想要的。

这应该可以排除以双下划线开头的函数的任何函数定义:

[report]
exclude_lines = 
    def __

这对我来说似乎是一个坏主意。您需要知道这些功能是否经过适当测试。它们是从您的公共API调用的:如果您没有测量他们调用的函数的覆盖范围,您如何声称您的公共API函数已经过全面测试?

要排除私有方法,而不是特殊方法,您可以尝试更精细的正则表达式:

[report]
exclude_lines = 
    def __[^(]*[^_][(]

但这有点疯狂......