无法为 Microsoft 单元测试用例框架模拟 SSH.Net 的 SFTPClient 对象

Unable to mock SSH.Net's SFTPClient object for Microsofts Unit test case framework

我已经使用SSH.Net的SftpClient对象在服务器上执行上传和下载操作。

我正在尝试为使用此 SftpClient 对象的 class 编写单元测试用例。

class 本身是模拟的,但我无法在不实际连接到服务器的情况下设置客户端对象,这是不正确的。

public class MockFTPStreamRepository : IFTPStreamRepository
{
   public async Task<MySFTFReposResults> MyMethod1(MyDTO dto)
   {
     MemoryStream stream = new MemoryStream();
     StreamWriter writer = new StreamWriter(stream);
     SftpClient myClient = new SftpClient("ftp://localhost", "", "");
     sftpClient.Connect();
     writer.Write("Some Content");
     writer.Flush();
     stream.Position = 0;
     return new MySFTFReposResults { IsTransferSuccess = true, FileStream = stream, sftpClient = myClient};
     }
}

我无法提供上面的实际 ftp 服务器和凭据进行连接,因为这不适用于其他环境。

有没有办法从中获取有效的 SftpClient 对象?

由于这是具体的 class,如果不创建真正的连接,就无法对您的方法进行测试。但是,您可以通过多种方式对此进行测试。

第一个是通过将 SftpCLient 包装在一个接口中并使用 Constructor Injection to create a seam. Then with the Moq 框架,您可以模拟从您自己的方法中调用的方法调用。

您还可以创建本地 sftp 服务器并创建真实案例的镜像,以便测试您的方法的行为。

也可能是有一个支持内存中 SFTP 服务器的 nuget 包。