Python 是否有可能使一个覆盖范围忽略此装饰器?
我构建了一个简单的装饰器,希望它能使覆盖率忽略应用它的任何内容。从经验上看,它没有效果。我所知道的关闭代码块覆盖范围的唯一方法是Python 是否有可能使一个覆盖范围忽略此装饰器?,python,code-coverage,Python,Code Coverage,我构建了一个简单的装饰器,希望它能使覆盖率忽略应用它的任何内容。从经验上看,它没有效果。我所知道的关闭代码块覆盖范围的唯一方法是#pragma:no cover-有没有办法将其转移到业务逻辑中 def deco(fn): return fn # pragma: no cover @deco def uncover_me(x): if x > 1: return 3 return 5 uncover_me(3) uncover_me(0) 在
#pragma:no cover
-有没有办法将其转移到业务逻辑中
def deco(fn):
return fn # pragma: no cover
@deco
def uncover_me(x):
if x > 1:
return 3
return 5
uncover_me(3)
uncover_me(0)
在.coveragerc文件中,可以指定将排除行的正则表达式(如中所述) 如果正则表达式与引入代码子句的行匹配,则整个子句被排除。排除装饰器将排除整个函数 这应该适合您:
# in .coveragerc
[report]
exclude_lines =
@deco
pragma: no cover
从文档中:
请注意,在配置文件中使用exclude_lines选项时,您将控制整个正则表达式列表,因此如果仍希望应用默认的“pragma:no cover”匹配,则需要重新指定该匹配
最终目标是什么?为什么您希望使用
@deco
而不是#pragma:no cover
?也许是为了控制它-“如果函数名是foo
,那么#pragma:no cover
,但仅当用户配置了bar=99
”我想把它附加到我们已经拥有的装饰器上。在3.7上,它在实践中似乎没有这样做。你能打开一个关于它的coverage.py问题,这样我们就可以处理细节了吗?一会儿就可以了