我目前正在编写一个Node库来在Docker容器中执行不受信任的代码。它基本上维护一个容器池运行,并提供一个接口来在其中一个容器中运行代码。执行完成后,相应的容器将被销毁并替换为新容器。
图书馆的四个主要类别是:
最后,该库的最终用户将只使用Sandbox类。
现在,我的问题是:我应该如何测试?
首先,我似乎很清楚我应该首先针对我的Sandbox类编写功能测试:
但是,我不确定测试它有什么意义,怎么做,以及我使用的架构是否适合正确测试。
任何与此相关的想法或建议都非常感谢! :)如果看起来不清楚,请随时要求澄清。
克里斯托弗
答案 0 :(得分:2)
尽可能多地尝试分离功能和单元测试。
如果您对Sandbox
上的构造函数进行了细微更改,那么我认为测试会变得更容易。 Sandbox
应该直接使用PoolManager
。然后,您可以单独模拟PoolManager
并测试Sandbox
,它只显示Jobs
,为PoolManager
调用Containers
并进行清理。好的,现在Sandbox
已经过单元测试了。
PoolManager
可能更难进行单元测试,因为Dockerode
客户端可能难以模拟(API相当大)。无论你是否嘲笑它,你都要测试:
可以通过在测试中(在容器中或本地)启动API来测试Container
。如果它是最小的重新创建它应该是直截了当的。一旦你拥有它,它真的只是测试一个HTTP客户端听起来像。
可以使用标准单元测试来测试容器中实际API的源代码。因为你正在处理不受信任的代码,所以有很多可能性:
代码基本上可以做任何事情。你必须选择你关心的事情。尝试并限制其他一切。
功能测试也很重要,这里有一些碎片需要处理,而且模拟Docker并不容易。
代码隔离是一个难题;我希望Docker最后一次我不得不处理它。请记住,您的客户将始终做您没想到的事情!祝你好运!