Pau*_*ver 6 python unit-testing code-coverage python-coverage
我不太明白Python的分支覆盖统计数据试图告诉我什么.给出表单的代码
def f(a, b):
c = (i for i in a)
d = (j for j in b) # Line of interest
return dict(zip(c, d))
print(f(['a', 'b'], [1, 2]))
Run Code Online (Sandbox Code Playgroud)
在单元测试期间导入的,Python的标准分支覆盖率告诉我该# Line of interest行仅被部分覆盖(n->-n在CLI输出中,漂亮的HTML报告中的"n↛exit[?]").
返回的dict清楚地打印出来,用空列表执行仍会产生未覆盖的行.
我是否误解了覆盖范围输出?这闻起来像臭虫吗?
Python 3.5.1,Coverage 4.0.3
我对此进行了进一步调查,我认为这不是覆盖范围内的错误。当第一个生成器 ( c) 终止时,zip()高效地不会从第二个生成器 ( ) 收集更多值d,因此分支覆盖率不会跟踪d运行到完成,即使实际上提取了每个元素。
如果你改为写:
def f(a, b):
c = (i for i in a)
d = tuple(j for j in b) # Line of interest
return dict(zip(c, d))
print(f(['a', 'b'], [1, 2]))
Run Code Online (Sandbox Code Playgroud)
正如人们所期望的那样,第二台发电机运行完成并且覆盖范围令人满意,尽管输出是相同的。
我认为没有一个简单的方法可以解决这个问题,即使您将生成器表达式编写为包含相同 for 循环的生成器函数,您也会收到一个(稍微更清晰的)错误,即执行从未跳转到函数退出。
我认为这只是覆盖范围和生成器退出条件的限制,因为它不知道生成器是否应该退出,因此它标记了未覆盖的情况。
| 归档时间: |
|
| 查看次数: |
517 次 |
| 最近记录: |