delphi – 如何测试连接到FTP服务器的类?

前端之家收集整理的这篇文章主要介绍了delphi – 如何测试连接到FTP服务器的类?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在为我的应用开发实时更新.到目前为止,我已经创建了几乎所有的单元测试,但我不知道如何测试连接到FTP服务器并下载新版本的特定类.

要测试这个类,我应该创建一个FTP测试服务器,并在我的单元测试中使用它?如果是这样,我如何确保这个FTP服务器始终与我的测试一致?我应该在测试开始之前手动创建我需要的每个文件,还是应该在我的测试类中自动化(拆除和设置方法)?

这个问题也适用于连接任何类型的服务器的单元测试类.

编辑

我已经在嘲笑我的ftp类,所以我不总是需要在其他测试中连接到ftp服务器.

让我看看我是否知道沃伦在他的评论中说的话:

I would argue that once you’re talking to a separate app over TCP/IP
we should call that “integration tests”. One is no longer testing a
unit or a method,but a system.

当单元测试需要与另一个应用(可以是HTTP服务器或FTP服务器)通信时,这不再是单元测试,而是集成服务器?如果是这样,我试图使用单元测试技术来创建这个测试是错误的吗?说我不应该单位测试这个班吗?这对我来说是有意义的,因为它似乎是一个单元测试的很多工作.

解决方法

在测试中,目的总是首先回答以下问题:测试的内容 – 即测试范围.

因此,如果您正在测试FTP服务器实现,则必须创建一个FTP客户端.

如果您正在测试FTP客户端,则必须创建一个FTP服务器.

因此,您将缩小测试范围,直到您达到一体水平.

它可以是例如为您的目的:

>获取为应用程序安装的当前文件的列表;
>获取远程可用文件的列表;
>获取文件更新
检查文件是否正确(校验和?);
>等等…

每个测试项目都有一些模拟和存根.见this article关于两者之间的区别.简而言之(AFAIK),一个存根只是一个仿真对象,它始终有效.而一个模拟(在每个测试中应该是唯一的)是可以改变测试结果(通过或失败)的元素.

为了FTP连接的确切目的,您可以使用(当测试客户端时)有一些返回文件列表的存根,并且将测试FTP服务器的几个可能的问题(超时,连接丢失,内容错误)的模拟.那么您的客户端将按预期的方式进行反应.您的模拟可能是一个真正的FTP服务器实例,但是会按预期的方式触发所有潜在的错误.通常,每个错误都会引发异常,这是由测试单元跟踪,以便通过/失败每个测试.

这很难写出好的测试代码.测试驱动的方法起初有点耗时,但从长远来看总是会更好.一本好书在这里是强制性的,或者至少有一些参考文献(像上面链接的Martin Fowler).在Delphi中,使用接口和SOLID原则可能会帮助您编写这样的代码,并创建存根/模拟来编写测试.

从我的实验中,每个程序员有时可能会在书面测试中丢失…好的测试写作比功能写作更耗时,在某些情况下…您被警告!每个试验应视为特征,其成本应予以评估:是否值得?这不是另外一个测试更合适吗?我的测试是否与测试的功能脱钩?是否尚未测试?我测试我的代码,还是第三方/库功能

不过,我的两分钱:HTTP / 1.1可能比FTP更好,甚至文件更新.您可以恢复HTTP连接,通过并行加载HTTP内容,并且该协议比FTP更为代理友好.并且比FTP容纳一些HTTP内容容易一些(一些FTP服务器也已知安全问题).大多数软件更新都是通过HTTP / 1.1进行的,而不是FTP(例如Microsoft产品或大多数Linux存储库).

编辑:

当您使用远程协议时,您可能会认为您正在进行集成测试.这可能是有道理的,但是IMHO这是不一样的.

为了我的理解,当您让所有组件与实际应用程序一起工作时,集成测试将发生,然后检查它们是否按预期工作.我关于FTP测试的建议是,您正在嘲笑FTP服务器,以便显式测试所有潜在问题(超时,连接或传输错误…).这与集成测试不同:代码覆盖范围更大.而您只是测试一部分代码,而不是整个代码集成.这不是因为您正在使用一些远程连接,您正在进行集成测试:这仍然是一体化测试.

当然,一体化和系统测试当然要在一体化测试之后进行.但FTP客户端单元测试可以模拟FTP服务器,在本地运行,但测试可能在真正的大型万维网上发生的所有潜在问题.

猜你在找的Delphi相关文章