问题描述
我为CI创建了一个小型应用程序。这个应用程序非常简单,它可以打印到控制台属性(我将其设置为选项)并退出。 我可以在我的cmd(我使用Windows)中执行它,就像这样:
docker run --rm myImage:latest say --param "hello world"
我在cmd中看到“ hello world”。 现在我要对图像进行测试。我使用Kotlin作为主要语言,使用Junit5作为测试框架,并使用com.github.dockerjava.api.DockerClient作为Docker客户端。我想编写这样的简单测试:
@Testcontainers
class Test{
val dockerImageId = System.getProperty("dockerImageId ")
var dockerClient = DockerClientFactory.instance().client()
@Test
fun init() {
val log = dockerClient.stratContainerFromImageId(dockerImageId).withExec("say --param \"hello world\"").getLog()
assertEqals("hello world",log)
}
}
在DockerClient Documentation经历了一个糟糕的夜晚之后,我可以像这样开始映像:
dockerClient.startContainerCmd(dockerClient.createContainerCmd(dockerId).exec().id).exec()
但是我打开LogContainerCmd并开始学习ResultCallback我想死!
为了简单的测试,我正在寻找简便的方法。现在怎么样了?
解决方法
您为什么不按照文档中的建议将容器创建为测试类字段? https://www.testcontainers.org/quickstart/junit_5_quickstart/从第2节开始
然后您可以运行命令,并执行execResult.getStdout()
或container.getLogs()