Swift 的 Testcontainers

Open in GitHub Codespaces

概述

Swift 的 Testcontainers 是一个旨在为 Swift 项目带来官方 Testcontainers 支持的库。它提供了在测试期间管理 Docker 容器的简单方法,使集成测试更轻松、更可靠。

我们欢迎您为这个令人兴奋且有趣的开源项目做出贡献 🫵。

安装

将以下依赖项添加到您的 Package.swift 文件中

.package(url: "https://github.com/cristianpalomino/testcontainers-swift.git", from: "0.0.1")

然后,像这样将其添加到您的目标 dependencies 部分

.product(name: "Testcontainers", package: "testcontainers-swift")

特性


启动通用容器

轻松启动可供使用的新通用容器的方法。

使用 Async/Await。

do {
    ...

    let container = try GenericContainer(name: "redis", port: 6379, logger: logger)

    // Start the container
    let response = try await container.start().get()
    logger.info("Container Name: \(response.Name)")
    
    ...
} catch {
    // Handle error
    print(error)
}

使用完成处理程序。

...

let container = try GenericContainer(name: "redis", port: 6379, logger: logger)

// Start the container
container.start().whenComplete { result in
    switch result {
    case let .success(response):
        self.logger.info("Container Name: \(response.Name)")
    case let .failure(error):
        // Handle error
        print(error)
    }
}

...

在幕后,该库处理以下步骤


移除通用容器

该库还允许您在完成容器使用后将其移除。

使用 Async/Await

do {
    ...

    let container = try GenericContainer(name: "redis", port: 6379, logger: logger)
    let response = try await container.start().get()
    logger.info("Container Name: \(response.Name)")
    
    ...
    // Perform operations with the running container
    ...
    
    // Remove the container
    try await container.remove().get()
    
    ...
} catch {
    // Handle error
    print(error)
}

使用完成处理程序。

...

let container = try GenericContainer(name: "redis", port: 6379, logger: logger)
container.start().whenComplete { result in
    switch result {
    case let .success(response):
        self.logger.info("Container Name: \(response.Name)")

        ...
        // Perform operations with the running container
        ...

        // Remove the container
        container.remove().whenComplete { result in
            switch result {
            case let .success:
                self.logger.info("Container Removed")
            case let .failure(error):
                // Handle error
                print(error)
            }
        }
    case let .failure(error):
        // Handle error
        print(error)
    }
}

...

在幕后,该库执行以下步骤


贡献

查看 贡献者 以获取所有贡献者信息。


加入我们的 Slack 工作区 | Slack 频道