问题描述
我有一个很大的python文件,其中数据(90%)与逻辑混合在一起。 不幸的是,重构逻辑不是一种选择。但是我想为逻辑和数据部分生成单独的覆盖率报告。 文件或多或少是这样的:
class Mapping1(BaseMapping):
mapping = "label 1"
class Mapping2(BaseMapping):
mapping = "label 2"
# many more BaseMappings follow...
class Mapping456(LogicMapping):
mapping = "label 456"
@classmethod
def additional_logic(cls): # I want to get coverage for this separately
<some code here>
class Mapping457(LogicMapping):
mapping = "label 457"
@classmethod
def additional_logic(cls): # I want to get coverage for this separately
<some code here>
class Mapping458(BaseMapping):
mapping = "label 458"
# many more BaseMappings follow...
我需要的是 coverage 的include_lines
选项,因此我可以这样做:
.coveragerc_data
[report]
exclude_lines =
def additional_logic
.coveragerc_logic
[report]
include_lines =
def additional_logic
但这是不可能的,因为 coverage 中没有“ include_lines”选项。
我也尝试过:
.coveragerc_logic
[report]
exclude_lines =
BaseMapping
这不是一个完美的解决方案,因为有时LogicMapping
显然不包含additional_logic
定义。
同样,这种覆盖方式将包括逻辑类的“映射”行。在现实世界中,每个类中有1-6个值,因此这会污染覆盖率报告。
不幸的是,将逻辑部分移动到另一个文件将需要更大的重构,因为在代码库的其他部分中有一些与该文件相关联的导入魔术以获取“映射”。
由于我想同时获取这两个部分的报告,因此也不能手动使用#pragma: no cover
排除数据部分。由于我需要为分散在文件中的10%的代码生成覆盖率报告,因此我对选择性包含(而非排除)感兴趣。
欢迎任何能帮助我避免重大重构的建议。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)