首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从模拟返回SftpFileInfo?Junit5 Java11弹簧集成

如何从模拟返回SftpFileInfo?Junit5 Java11弹簧集成
EN

Stack Overflow用户
提问于 2021-02-02 21:42:41
回答 1查看 266关注 0票数 1

在我的配置中

代码语言:javascript
复制
    @MessagingGateway
    public interface SftpMessagingGateway {
        @Gateway(requestChannel = "listFiles")
        List<SftpFileInfo> readListOfFiles(String payload);
    }
    @Bean
    @ServiceActivator(inputChannel = "listFiles")
    public MessageHandler sftpReadHandler(){
        SftpOutboundGateway sftpOutboundGateway = new SftpOutboundGateway(sftpSessionFactory(), "ls", remoteDirectory);
        return sftpOutboundGateway;
    }

在我的代码中,我将其命名为:List<SftpFileInfo> remoteFiles = sftpGateway.readListOfFiles("payload"),并使用SftpFileInfo中的文件名执行一些操作。在我的测试中,我想模拟网关并返回特定的文件名;我的测试中有这样的内容:

代码语言:javascript
复制
        ChannelSftp.LsEntry lsEntry = new ChannelSftp().new LsEntry("filename", "filename", null);
        Mockito.when(sftpMessagingGateway.readListOfFiles(Mockito.anyString())).thenReturn(List.of(new SftpFileInfo(lsEntry)));

我需要使模拟返回一个带有文件名的SftpFileInfo,以便能够正确地运行我的代码,我查看了这个类并看到:

代码语言:javascript
复制
    LsEntry(String filename, String longname, SftpATTRS attrs){
      setFilename(filename);
      setLongname(longname);
      setAttrs(attrs);
    }

我有办法在我的测试中做到这一点吗?目前,我无法设置LsEntry,因为它不能在包之外被访问。

回答后:

代码语言:javascript
复制
ChannelSftp.LsEntry lsEntry = mock(ChannelSftp.LsEntry.class);
SftpATTRS attributes = mock(SftpATTRS.class);
when(lsEntry.getAttrs()).thenReturn(attributes);
when(lsEntry.getFilename()).thenReturn("file");
SftpFileInfo fileInfo = new SftpFileInfo(lsEntry);
List<SftpFileInfo> sftpFileInfoList = List.of(fileInfo);
Mockito.when(sftpMessagingGateway.readListOfFiles(Mockito.anyString())).thenReturn(sftpFileInfoList);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-02 22:08:31

在Spring集成测试中,我们确实这样做了:

代码语言:javascript
复制
SftpATTRS attrs = mock(SftpATTRS.class);
Constructor<LsEntry> ctor = (Constructor<LsEntry>) LsEntry.class.getDeclaredConstructors()[0];
ctor.setAccessible(true);
LsEntry sftpFile1 = ctor.newInstance(channel, "foo", "foo", attrs);

我认为类似的东西也适用于你的模仿者。

另一种方法是直接模仿它:

代码语言:javascript
复制
LsEntry lsEntry = mock(LsEntry.class);
SftpATTRS attributes = mock(SftpATTRS.class);
when(lsEntry.getAttrs()).thenReturn(attributes);
when(lsEntry.getFilename()).thenReturn(fileName);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66018053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档