gpt4 book ai didi

python - 以可模拟/可测试的方式连接文件

转载 作者:太空宇宙 更新时间:2023-11-03 18:44:27 24 4
gpt4 key购买 nike

我有一个用例,其中有一堆文件需要按顺序连接,在连接到输出后删除每个文件。代码看起来像这样:

def compile(self):
with open("output.file", "wb") as outfile:
for part in sorted(self.parts):
with open(part, "rb") as infile:
for line in infile:
outfile.write(line)

os.remove(part)

# do other logic ...

我很难找到正确测试此代码的方法。我想确定的是:

  1. 各部分按排序顺序排序并循环。
  2. 逐行读取每个输入文件并将其写入输出文件。
  3. 每个输入文件在耗尽后都会被删除。

我的主要困难是模拟文件对象。我正在使用 Python 的 mock 库,但我不确定在哪里修补以及如何完成它。如何修补文件对象以确保所有内容都正确写入?

最佳答案

你并不是真的想测试“open”、“os.remove”、“sorted”是否真正工作,可以安全地假设,因为它们是 python 标准库的一部分,所以它们已经被大量使用在其他地方测试过。您真正想要的只是测试它们是否实际被调用,因此您可以简单地在测试代码中模拟这些调用,并测试它们是否实际使用您期望的参数调用。

测试可能类似于

@mock.patch.object(os, 'remove')
@mock.patch('%s.sorted' % __name__, create=True)
@mock.patch('%s.open' % __name__, create=True)
def test_compile(mock_open, mock_sort, mock_os_remove):
mock_sort.return_value = ['parts']
compile()
mock_open.assert_any_call('output.file', 'wb')
mock_sorted.assert_called_with(['parts'])
mock_os_remove.assert_called_with('parts','rb')

显然,这必须进行一些调整,因为compile()似乎是一个方法而不是一个独立的函数,但是该函数的补丁和一般方法应该是相同的。

关于python - 以可模拟/可测试的方式连接文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com