使用try-except-finally和上下文管理器来扩大覆盖范围

时间:2012-04-12 11:19:29

标签: python unit-testing code-coverage

这是我在程序中的流程

277: try:
278:    with open(r"c:\afile.txt", "w") as aFile:
...:        pass # write data, other exceptions/errors can occur here that have to be handled by the caller
329: except IOError as ex:
...:    print ex
332: finally:
333:    if os.path.exists(r"c:\afile.txt"):
334:        shutil.copy(r"c:\afile.txt", r"c:\dest.txt")

除了从第278行到第333行之外,我已经涵盖了所有路径

  • 我得到了正常的快乐。
  • 当使用所述文件名
  • 调用open时,我将__builtin__.open存根以引发IOError

但是如何从278到333.这甚至可能吗?

<小时/> 附加信息: - 使用coverage.py 3.4(我们无法升级到3.5)

2 个答案:

答案 0 :(得分:2)

Daan,可能是这表示coverage.py中的错误。我从您的描述中假设您正在使用分支覆盖,并且coverage.py声称278-333缺失。如果您可以将其简化为可重现的测试用例,我将为其创建一张票。

答案 1 :(得分:0)

通常以下列方式处理流程

try:
    with open(r"C:\file.txt", "w") as aFile:
        a.File.write("!")
    if os.path.exists(r"C:\file.txt"):
        shutil.copy(r"C:\file.txt", r"C:\dest.txt")
except IOError as ex:
    print ex