如何testing与Docker一起使用的代码?

我们有一些适用于Docker的Java代码。 例如,一种方法可能会创builddockernetworking,创build一个或两个容器,设置标签,标签,公开一些端口等。

我们想要testing这个,但是我们的unit testing变成了集成testing,因为每个testing实际上都是和真正的Docker一起工作的。 与此相关的主要问题是testing的速度 – 我们有很多 – 开发人员的速度太慢了。 而当testing运行时,机器几乎被冻结。

我们在Docker之上有一层,再加上我们使用Docker Java库来与API交谈。

问题:在这种情况下,我们应该如何devise我们的testing?

目前的想法是有“模型”docker客户端,它接收命令,但不要在真正的docker上发出它们; 然后我们可以检查命令是否正确设置。 为此,我们还需要模拟docker行为,如调用docker ps等。 而且,我们不能100%确定我们发送的命令真的与Docker一起工作! 想象一下,如果docker版本发生了变化,API中的内容也发生了变化 – 我们如何能够检测到这一点?

这听起来像你已经在路上,只是一般的build议:

  • 最小化工作集,听起来像你已经用微容器做这个
  • 尽量减less整合资源,如果你使用N节点networking,N-1就足够了吗? validation目标function所需的绝对最less资源数量是多less? (0,1和2个实例)
  • Docker API的最低基本组件是什么? docker ps改变吗? 你甚至需要关心docker ps
  • 在可能的情况下汇总昂贵的testing,如果每个testing都创build了一个networking,那么是否有为一组testing创build单个networking? 或者用多个断言重载单个testing? 这些都是折衷的,通过重载单个testing失败会掩盖以后的断言?
  • 修剪重复或重叠testing

不幸的是,加速testing套件可能会有一些信心飞跃。 如果没有任何明显的重复,那么把东西移动到一个假的docker执行程序就不会像对真正的docker执行testing一样强烈的断言。