繁体   English   中英

用 Java 模拟 SFTP、FTP、FTPS、本地文件系统服务器

[英]Mocking SFTP, FTP, FTPS, Local File System Server in Java

我需要在 Java 中测试 FTP/FTPS/SFTP/本地文件系统协议。

我需要一个可用于任何这些方法的模拟服务器。

我可以找到一个 MockFTPServer。 据我了解,它只能用于简单的FTP协议,不能用于FTPS/SFTP/Local File System。

任何人都可以建议是否有任何模拟实现可用于支持 Java 中的 FTP/FTPS/SFTP/本地文件系统的服务器?

谢谢,

维杰·博尔

假 SFTP 服务器规则 它是 JUnit 4 的规则/库,在测试期间运行 SFTP 服务器。 它提供了方便的方法,可帮助您将文件放到服务器上并从中获取文件。

完全披露:我是假 SFTP 服务器规则的作者。

这些问题有点旧,但无论如何我都会发布我的答案,因为它也可能对其他人有所帮助。

我写了一篇关于如何使用 Testcontainers 和 atmoz/sftp Docker 镜像创建模拟 sftp 服务器的文章,它也适用于您的其他要求。

完整的例子可以在这里看到

你会像这样用 SFTP 定义你的 TestContainer

 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");

当您需要 FTPS 服务器或任何其他协议时,您可以选择另一个像这样的图像并调整容器配置。 https://hub.docker.com/r/bozorgiyan/ftps-server

至于本地文件系统,我不确定是否有任何特殊要求。 使用 JUnit 5,您可以轻松地创建一个临时目录,如下所示

@TempDir
File mockFileSystemDirectory;

您可以创建一个 util 类来重写您到该目录的路径,如下所示:

public static File convertToFakeFileSystem(File yourFile, File fakeFileSystem) {
    return new File(fakeFileSystem.getAbsolutePath() + yourFile
            .getAbsolutePath()
            .replaceAll("C://", "/"));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM