Java 如何模拟sftp会话
我正在更新一些测试。在获取sftp会话之前。为此,用户名和密码已在属性文件中硬编码。由于安全原因,密码无法签入,必须取消。但是,单元测试在以下位置失败:Java 如何模拟sftp会话,java,junit,sftp,Java,Junit,Sftp,我正在更新一些测试。在获取sftp会话之前。为此,用户名和密码已在属性文件中硬编码。由于安全原因,密码无法签入,必须取消。但是,单元测试在以下位置失败: private DefaultSftpSessionFactory sftpClientFactory; private SftpSession sftpSession; @Before public void setup() { sftpSession = sftpClientFactory.getSession();
private DefaultSftpSessionFactory sftpClientFactory;
private SftpSession sftpSession;
@Before
public void setup() {
sftpSession = sftpClientFactory.getSession();
}
此步骤因“需要密码或私钥”而失败。我希望获得模拟会话,以便不必提供密码。关于未回答/无法回答的问题,模拟方法是:
private@Mock SftpSession SftpSession;
…加上相应的,或(手动)通过SftpSession=Mockito.Mock(SftpSession.class);
)
a。请参阅,是否需要SessionFactory(用于测试),如果需要,也可以使用mock
Mockito.when(sftpSession.foo(x,y,z))。然后…
或Mockito.verify(sftpSession,Mockito.times(n)).foo(x,y,z);
)
- 选择一个SFTP服务器Docker映像(可能值得一试-从星星数和下载量判断)-确保它易于配置(在
中,用户可以使用环境变量进行配置-请参阅文档)atmoz/SFTP
- 使用Testcontainers在测试中设置服务器(可以使用设置容器的环境变量)。有关详细信息,请参阅快速启动手册
private static final GenericContainer sftp = new GenericContainer(
new ImageFromDockerfile()
.withDockerfileFromBuilder(builder ->
builder
.from("atmoz/sftp:latest")
.run("mkdir -p /home/" + USER + "/upload; chmod -R 007 /home/" + USER)
.build()))
//.withFileSystemBind(sftpHomeDirectory.getAbsolutePath(), "/home/" + USER + REMOTE_PATH, BindMode.READ_WRITE) //uncomment to mount host directory - not required / recommended
.withExposedPorts(PORT)
.withCommand(USER + ":" + PASSWORD + ":1001:::upload");