我想为我的代码编写一个测试,它使用 FTP 库并通过 FTP 上传数据。
我想避免在我的测试中需要一个真正的 FTP 服务器。
测试我的代码最简单的方法是什么?
我想测试几个边缘情况。
例如,我的代码试图创建一个已经存在的目录。
我想捕获异常并进行适当的错误处理。
我知道我可以使用模拟库。我以前用过。但对于这个用例,也许有更好的解决方案?
更新 为什么我不想进行模拟:我知道我可以使用模拟来解决这个问题。我可以模拟我使用的库(我使用来自 Stefan Schwarzer 的 ftputil)并以这种方式测试我的代码。但是,如果我更改我的代码并在将来使用不同的 FTP 库会怎样?然后我也需要重新编写我的测试代码。我很懒。我希望能够在不触及测试代码的情况下重写我正在测试的真实代码。但也许我仍然缺少使用模拟的好方法。
最佳答案
首先要嘿这个或的方式。你不是在问 Mocking,你的问题是关于 Faking。
Fake,一个接口(interface)的实现,表达了正确的行为,但不能在生产中使用。
Mock,一种基于脚本(电影脚本中的脚本,而不是未编译代码)响应响应交互的接口(interface)的实现。
stub ,一种缺少任何实际实现的接口(interface)实现。通常用于 mcguffin 风格测试。
请注意,在每种情况下都使用“接口(interface)”一词。
你的问题是问如何伪造一个 TCP 端口,这样行为就是一个 FTP 服务器,下面是一个 rw 文件系统的状态。
这很难。
模拟一个在调用 mkdir 函数时抛出的内部接口(interface)要容易得多。
如果你必须伪造一个 FTP 服务器。我建议创建一个服务器处于所需状态的 docker 容器,并使用 docker 来处理 FTP 服务器的可重复性和生命周期。
关于python - 用于测试的临时 ftp 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52384833/