我练习TDD但我之前没有使用过模拟。
假设我想构建一个应该创建文件夹的函数,但前提是该文件夹尚不存在。作为我的TDD周期的一部分,我首先要创建一个测试,看看我的函数不会删除已存在的文件夹。
由于我的函数可能会使用os.rm,我收集我可以使用mocking来查看os.rm是否已被调用。但这并不是很令人满意,因为有很多方法可以删除文件夹。如果我稍后更改我的功能以使用shutil.rmtree怎么办? os.rm不会被调用,但可能该函数现在错误地删除了该文件夹。
是否可以以对方法不敏感的方式使用模拟? (实际上没有在我的机器上创建文件并查看它们是否被删除 - 直到现在我一直在做什么)
答案 0 :(得分:0)
我可以想到两个选项:
delete_folder
;在测试中,您模拟该函数并检查它是否已被调用。答案 1 :(得分:0)
" mockism"是测试将您的代码绑定到特定的实现。一旦您决定测试特定的函数调用,您必须在生产代码中调用(或不在您的示例中)该函数。
正如您已经注意到的,有很多方法可以删除目录(即使将rm -rf
作为外部进程运行)。
我认为你这样做的方式已经是最好的了 - 你检查一下你感兴趣的实际副作用,无论它是如何产生的。 如果您对性能有疑问,可以尝试将该测试设置为可选,并且比其他测试套件更少地运行它。