无法为 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 包。
我已经使用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 包。