簡體   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