Python模拟删除

时间:2016-05-24 06:46:34

标签: python unit-testing mocking

我练习TDD但我之前没有使用过模拟。

假设我想构建一个应该创建文件夹的函数,但前提是该文件夹尚不存在。作为我的TDD周期的一部分,我首先要创建一个测试,看看我的函数不会删除已存在的文件夹。

由于我的函数可能会使用os.rm,我收集我可以使用mocking来查看os.rm是否已被调用。但这并不是很令人满意,因为有很多方法可以删除文件夹。如果我稍后更改我的功能以使用shutil.rmtree怎么办? os.rm不会被调用,但可能该函数现在错误地删除了该文件夹。

是否可以以对方法不敏感的方式使用模拟? (实际上没有在我的机器上创建文件并查看它们是否被删除 - 直到现在我一直在做什么)

2 个答案:

答案 0 :(得分:0)

我可以想到两个选项:

  1. 您将删除包装在一个函数中,例如delete_folder;在测试中,您模拟该函数并检查它是否已被调用。
  2. 您使用pyfakefs来模拟整个文件系统。我还没有使用它,但它看起来非常强大。

答案 1 :(得分:0)

" mockism"是测试将您的代码绑定到特定的实现。一旦您决定测试特定的函数调用,您必须在生产代码中调用(或不在您的示例中)该函数。

正如您已经注意到的,有很多方法可以删除目录(即使将rm -rf作为外部进程运行)。

我认为你这样做的方式已经是最好的了 - 你检查一下你感兴趣的实际副作用,无论它是如何产生的。 如果您对性能有疑问,可以尝试将该测试设置为可选,并且比其他测试套件更少地运行它。