有办法进行动态覆盖吗?例如,假设这个pytest代码:
src = '''
def virtual_func(a):
if a < 5 :
return 'LESS THAN FIVE'
else :
return 'MORE THAN FIVE'
'''
obj = compile(src, 'my_file_name.py', 'exec')
def test_dyncov():
g = dict()
exec(obj, g, g)
assert 'LESS THAN FIVE' == g['virtual_func'](3)
如何获取my_file_name.py的覆盖率报告?
注:这是一个最小的测试用例示例。在现实生活中,它将用于覆盖模板引擎生成的python模板。顺便说一句,在现实生活中的代码中,模板几乎像模块一样加载,它得到一个虚拟模块名和一个虚拟文件名(但所有内容都留在内存中(。如果可能的话,我想知道如何使用虚拟文件名(本例中为'my_file_name.py'(获取报告
Coverage.py支持可以做到这一点的插件:https://coverage.readthedocs.io/en/coverage-5.5/api_plugin.html
写的不多,所以写一个可能有点困难,但它是可以做到的。这是你自己的模板引擎,还是公共的?