我需要用 Java 测试 FTP/FTPS/SFTP/本地文件系统协议。
我需要一个可以在任何这些方法中使用的模拟服务器。
我可以找到一个 MockFTPServer。据我了解,它只能用于简单的FTP协议,不能用于FTPS/SFTP/Local File System。
任何人都可以建议是否有任何模拟实现可用于支持 Java 中的 FTP/FTPS/SFTP/本地文件系统的服务器?
谢谢,
维杰·博尔
有假 SFTP 服务器规则。它是 JUnit 4 的规则/库,在测试期间运行 SFTP 服务器。它提供了方便的方法来帮助您将文件放到服务器上并从中获取文件。
完全披露:我是 Fake 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://", "/"));
}