python - 用于测试的临时 ftp 服务器

标签 python testing ftp mocking

我想为我的代码编写一个测试,它使用 FTP 库并通过 FTP 上传数据。

我想避免在我的测试中需要一个真正的 FTP 服务器。

测试我的代码最简单的方法是什么?

我想测试几个边缘情况。

例如,我的代码试图创建一个已经存在的目录。

我想捕获异常并进行适当的错误处理。

我知道我可以使用模拟库。我以前用过。但对于这个用例,也许有更好的解决方案?

更新 为什么我不想进行模拟:我知道我可以使用模拟来解决这个问题。我可以模拟我使用的库(我使用来自 Stefan Schwarzer 的 ftputil)并以这种方式测试我的代码。但是,如果我更改我的代码并在将来使用不同的 FTP 库会怎样?然后我也需要重新编写我的测试代码。我很懒。我希望能够在不触及测试代码的情况下重写我正在测试的真实代码。但也许我仍然缺少使用模拟的好方法。

已解决 https://github.com/tbz-pariv/ftpservercontext

最佳答案

首先要嘿这个或的方式。你不是在问 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/

相关文章:

qt - 重置 QNetworkAccessManager 后端的方法

java - FTPClient(commons net)上传问题

python - 计算字符串出现次数/枚举列表中的出现次数

python - 在 python 中将 Tuple 传递给 MySQLdb 时出现问题

unit-testing - 没有方法的类应该被测试?

maven - 如何通过从 Web 界面单击来触发 Junit/Testng 测试运行

testing - 自动化测试框架

html - 服务器获取旧版本的图像?

python - 从列表列表中删除所有出现的特定值 python

python - 为什么在我的函数输出后打印 "None"?