背景
我有几个使用coverage.py的Django项目,并且一直试图向我的.coveragerc配置文件的exclude_lines部分添加一些额外的表达式。问题是,即使使用适当的正则表达式在测试人员(如http://www.pythonregex.com或http://www.regexr.com )中提取行,也不会导致报告中忽略行。
我已经查看了文档,并在存储库中搜索了一下,但是一直未能找到任何理由来解释为什么我的配置可能不起作用。从文档中可以看出,我的配置与他们所描述的完全一样。
我还尝试使用姜戈-鼻子 Version1.2,这是最后一次PyPI发行版,它将允许异常注入,但没有效果,它似乎在计算Django视图和Django REST API端点的覆盖率方面存在一些问题,至少在1.7版中是这样。
我试过的
我的配置如下:
[run]
branch = True
omit =
*/tests*
*/migrations/*
*__init__.py*
*/settings/*
*wsgi.py*
*admin.py*
[report]
# Regexes for lines to exclude from consideration
exclude_lines =
pragma: no cover
def __repr__
if self.debug:
raise AssertionError
raise NotImplementedError
(.*)except Exception as e:(.*)
if 0:
if __name__ == .__main__.:我还在配置的report部分尝试了以下异常处理组合:
(.*)except Exception as e:
except Exception as e:
except Exception as e:(.*)下面是一个函数的例子,它包含了我期望被忽略的部分代码:
def my_func():
try:
# Some logic
return True
except Exception as e:
return defensive_exception(my_func.__name__, e, False)在上面的示例中,基于文档,我希望忽略except Exception as e:下的所有内容,或者至少忽略except Exception as e行本身。然而,情况似乎并非如此。如果有人对我的配置有什么问题或者我需要做什么不同的事情有一些洞察力,我将非常感谢帮助。
发布于 2014-11-21 18:01:50
你不需要匹配整条线,所以没有必要在最后点星。这应该是可行的:
[report]
# Regexes for lines to exclude from consideration
exclude_lines =
pragma: no cover
def __repr__
if self.debug:
raise AssertionError
raise NotImplementedError
except Exception as e:说:这种编码风格让我非常担心。当你这样做的时候捕捉普通的异常是不好的风格,并且可以隐藏问题。那么,您似乎并不关心该代码是否经过测试!
如果您需要对大量这样的函数执行强异常处理,那么您可能希望编写一个函数装饰符来包装函数调用。这将减少代码行数,并集中您的逻辑。然后,您也可以在一个地方处理覆盖问题。
发布于 2014-11-21 16:09:01
我一直做的就是使用pragma: no cover来实现您已经在exclude_lines中拥有的功能。
def my_func():
try:
# Some logic
return True
except Exception as e: # pragma: no cover
return defensive_exception(my_func.__name__, e, False)https://stackoverflow.com/questions/27064807
复制相似问题