我正在更新一些测试。Before获得了sftp会话。为此,用户名和密码已经被硬编码在属性文件中。由于安全原因,密码不能被签入,必须被清空。然而,单元测试在
private DefaultSftpSessionFactory sftpClientFactory;
private SftpSession sftpSession;
@Before
public void setup() {
sftpSession = sftpClientFactory.getSession();
}
此步骤失败,并显示“需要密码或私钥”。我希望获得一个模拟会话,这样我就不必提供密码。
4条答案
按热度按时间42fyovps1#
如果您使用的是JUnit 5 Jupiter(可能也很容易适用于JUnit 4),我已经编写了一个article,说明如何使用atmoz/sftp Docker映像和Testcontainers来实现这一点。
完整的工作示例可在此处找到
https://overflowed.dev/blog/sftp-testing-junit-testcontainers-atmoz-sftp/
这基本上就是使用SFTP定义TestContainer的方式
dgsult0t2#
对于未回答/能够回答的问题What's the best mock framework for Java?,Mockito方法为:
1.将所需的库放入(测试)类路径中。(https://mvnrepository.com/artifact/org.mockito)
1.模拟SftpSession。(通过注解
private @Mock SftpSession sftpSession;
...加上相应的initialization/enablement,或者(手动)通过sftpSession = Mockito.mock(SftpSession.class);
)a.查看是否需要SessionFactory(用于测试),如果需要,还需要mock。
1.模拟/验证/重置与模拟对象的任何交互(在您的测试中)。(如
Mockito.when(sftpSession.foo(x,y,z)).then...
或Mockito.verify(sftpSession, Mockito.times(n)).foo(x,y,z);
)进一步阅读:
nxagd54h3#
我不知道这个测试的目的,但是作为嘲笑的替代方法,我可以建议在一个功能齐全的SFTP服务器上进行测试,就像最初打算的那样。
诀窍是使用Docker和一些支持Docker的java库,如Testcontainers。
atmoz/sftp
中,用户可以使用环境变量进行配置--参见文档)。vsmadaxz4#
如jannishere所述,更好的替代方案是使用功能完备的测试SFTP环境。
**为什么?**因为模拟逻辑需要大量的样板文件,并且不允许完全测试应用程序及其移动部分。幸运的是,测试容器支持足够成熟,可以用于您的情况。
SpringBoot环境中的SFTP测试容器可以很容易地设置如下:
完整的Sping Boot 应用程序可通过here下载。