我正在为我的应用开发实时更新.到目前为止,我已经创建了几乎所有的单元测试,但我不知道如何测试连接到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 – 如何测试连接到FTP服务器的类?的更多相关文章

  1. ios FTP使用NSURLSession上传

    我试图通过FTP将文件上传到服务器.根据NSK的NSURLSession类支持FTP操作.有一个着名的AppleDeveloperblog也支持.但还不清楚NSURLSessionAPI是否支持ftp上传?

  2. ios – 我在哪里可以找到用于创建IPad应用程序的Delphi资源?

    我之前一直在使用Delphi并且一直都是Windows家伙.我的妻子为我的生日买了一台新的iPad,我昨晚第一次使用它.哇!…

  3. 如何从命令行部署OSX或IOS Delphi项目?

    我正在使用像这样的脚本构建我的Delphi应用程序现在我想添加一个选项将应用程序部署到OSX系统修改这样的脚本,那么可以从命令行部署OSX或IOSDelphi项目吗?

  4. 如何检查Android和iOS上的网络是否可用(Delphi XE5)

    解决方法试试这个:

  5. Java操作FTP实现上传下载功能

    这篇文章主要为大家详细介绍了Java如何通过操作FTP实现上传下载的功能,文中的示例代码讲解详细,对我们学习Java有一定帮助,需要的可以参考一下

  6. Java实现FTP上传到服务器

    这篇文章主要为大家详细介绍了Java实现FTP上传到服务器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  7. PHP操作FTP类 (上传、下载、移动、创建等)

    这篇文章主要介绍了PHP操作FTP类,实现FTP上传、FTP下载、FTP移动、FTP创建等,感兴趣的小伙伴们可以参考一下

  8. java实现上传文件到FTP

    这篇文章主要为大家详细介绍了java实现上传文件到FTP,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  9. PHPStrom 新建FTP项目以及在线操作教程

    PhpStorm是一个轻量级且便捷的PHP IDE,其提供的智能代码补全,快速导航以及即时错误检查等功能大大提高了编码效率。它是一款商业的 PHP 集成开发工具,以其独特的开发便利性,短时间内赢得了大量PHPer的青睐。今天我们来详细学习下FTP相关的操作

  10. php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)

    下面小编就为大家带来一篇php使用ftp远程上传文件类(完美解决主从文件同步问题的方法)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. delphi – 主窗口按进程名称处理

    DelphiXe,Win7x64如何从进程名称(exe文件的完整路径)获取主窗口句柄,或至少一个类或窗口名称(如果该进程只有一个窗口).例:解决方法我同意Petesh的说法,你需要枚举顶级窗口并检查创建它的进程的模块文件名.为了帮助您开始枚举顶级窗口,这是一个delphi实现.首先,当你回调给你时,你需要一些与EnumWindows方法通信的方式.为此声明一条记录,该记录将保存您要查找的模块的文件

  2. 如何在Delphi中纯粹通过RTTI信息(即不使用任何实际对象实例)获取TObjectList的子项类型?

    我正在使用RTTI实现用于流式传输任意Delphi对象的通用代码,并且为了使其工作(更具体地说,为了使加载部分工作),我需要以某种方式获得TObjectList的子项类型<T>不使用任何实际对象实例的字段.要求不使用任何实际对象实例的明显原因是,在从流加载对象的情况下(仅基于要加载的对象的类类型的知识),我将不会有任何实例在加载完成之前完全可用–我宁愿只能访问相关类的纯RTTI数据.我希望能

  3. inno-setup – Inno Setup – 安装程序背景图片

    图像作为安装程序背景如何用inno5.5.9做到这一点?

  4. inno-setup – Inno Setup – 如何添加多个arc文件进行解压缩?

    使用InnoSetup解压缩弧文件.我希望有可能解压缩多个arc文件以从组件选择中安装文件(例如).但仍然显示所有提取的整体进度条.这可能吗?的回答的修改预备是相同的,参考其他答案.在ExtractArc中,为要提取的每个存档调用AddArchive.

  5. delphi – 如何在DataSet的帮助下在TAdvStringGrid中显示数据库中的BLOB图像

    解决方法CreateBlobStream正在创建一个TStream对象,而不是TMemoryStream.由于您不想将JPG写入数据库,因此应使用bmRead而不是bmReadWrite.我不习惯sqlite,但你必须确保使用合适的二进制日期类型.为了确保存储的图像真的是JPG,您应该编写JPG以进行测试,例如:

  6. inno-setup – 在Inno Setup的Code部分下载程序后运行程序

    如何运行我通过Internet下载的应用程序,在代码部分中使用,并等待该应用程序完成运行.我有,使用InnoTools下载程序,下载这两个文件,我想,在第二个完成下载后运行该下载,或jdk-8u111-windows-x64.exe,然后继续安装.解决方法使用其他下载插件,而不是ITD(请参阅下面的原因).例如,InnoDownloadPlugin.当您包含idp.iss时,它定义了一个全局IDP

  7. progress-bar – Inno Setup Run部分的简单进度页面

    我的安装程序非常简单,它基本上是:>欢迎页面>进展页面>最终页面欢迎页面和最终页面是标准页面.在Progress页面,我正在静默安装一堆其他程序.实际的脚本是在[Run]部分中安装每个程序.问题是酒吧达到100%然后停留在那里.我只能更改消息文本.我想要实现的是使用Pascal脚本显示进度,例如:这样我就可以显示更准确的进度条.这就是我所拥有的:问题是,当我构建安装程序时,它不显示欢迎页面.我做错了什么?

  8. delphi – 如何使“显示/隐藏桌面图标”设置生效?

    下面的代码调用SHGetSetSettings函数来隐藏桌面图标但它只是从视图菜单中取消选中“显示桌面图标”.我打电话给SHChangeNotify;更新桌面,但这不起作用?解决方法isa,要刷新桌面,您可以将F5键发送到progman窗口隐藏桌面图标的另一种方法是再次显示

  9. inno-setup – Inno Setup – 避免显示子安装程序的文件名

    我试图使用InnoSetup–Howtohidecertainfilenameswhileinstalling?(FilenameLabel)的想法Theonlysuresolutionistoavoidinstallingthefiles,youdonotwanttoshow,usingthe[Files]section.Installthemusingacodeinstead.UsetheEx

  10. inno-setup – Inno Setup磁力链接下载实施

    我目前正在使用InnoDownloadPlugin为我的安装程序下载文件,这个问题最大的问题是faila正确下载文件.因为连接不良等诸多原因.我想添加一种替代方法来下载文件,因此用户可以选择是否需要常规方式或torrent方式.我知道我可以使用aria2c.exe应用程序(https://aria2.github.io/),有人可以帮我实现它的inno设置代码吗?我需要的是使用torrent(ar

返回
顶部