单元/集成测试FTP访问

本文关键字:访问 FTP 集成测试 单元 | 更新日期: 2023-09-27 17:58:55

我的团队的一名成员正在编写一个访问外部FTP站点以下载文件的应用程序。编写完代码后,我们希望能够在不使用物理ftp服务器的情况下进行集成测试,因为它是一个外部站点。

我们过去也做过类似的事情,使用nDumpster在代码中模拟smtp服务器,我们想知道是否有任何符合equilivent的ftp服务器可以使用

编辑:

我应该补充一点,这些不是真正的单元测试,我们有这些,并模拟我们的ftp实现。

然而,我们在接口的实际实现中使用了WebFtpRequest.Create()。因此,测试此代码需要一个实际的服务器(除非我们在测试中注册了自己的协议),最终我们将不得不针对实际的服务器进行测试!。

我们希望能够在代码中启动和停止ftp服务器(很像nDumpster),并检查我们的调用是否正确。

单元/集成测试FTP访问

我只是需要一些类似的东西,最终得到了基于小型FTPDMIN命令行FTP服务器的解决方案。你可以在这里找到我的解决方案:https://github.com/Buthrakaur/FtpIntegrationTesting

您应该使用FTP服务器抽象代码的接口。如果您有这个接口,您可以创建FTP通信的存根实现,使您的测试代码不依赖于特定的FTP服务器,并提高测试性能。

特别是这些类型的依赖关系应该从普通代码中抽象出来,以防止与难以模仿的东西(如FTP或邮件服务器)紧密耦合。

我不想使用nDumpster这样的工具,而是交换好的设计使其成为可能的实现。

您应该向FtpService类引入如下接口:

interface IFtpService
{
    byte[] Download(string fileName);
    bool Upload(byte[] data);
}

实现此接口:

public class FtpService: IFtpService
{
    //public byte[] Donload implementation goes here
    //public bool Upload(byte[] data) implementation goes here
}

在你的单元测试中,你应该使用Mocks来模拟IFtpService并使用它:创建你的期望值,为常见的Ftp异常等创建期望值。

这使您与真正的FTP基础设施分离,您的测试不依赖于硬件(网络连接)。

您可以在项目或单元测试中包含Rebex FileServer,它在许多平台上都受支持,包括.NET

可以在使用Rebex博客上找到一个小的指南

它不是免费的,我也没有任何附属关系。

编辑:我随后发现了这个令人愉快的"穷人FTP服务器",其中包括源代码(MIT许可证)。