Rest 使用外部依赖测试容器化微服务

Rest 使用外部依赖测试容器化微服务,rest,unit-testing,docker,microservices,external-dependencies,Rest,Unit Testing,Docker,Microservices,External Dependencies,因此,我构建了一个RESTAPI微服务,它查询本地Elasticsearch实例,并根据内部协议转换结果。我将其构建到Docker映像中,并希望在构建中对其运行一些单元测试。由于ES连接到一个专用Docker网络,在构建过程中微服务无法访问它,因此测试显然失败了。我想知道,有没有一种方法可以避免这种情况,而不必使用一些复杂的测试框架来进行依赖注入?您如何在工作实践中测试此类容器?我将构建应用程序而不进行任何测试。然后我将使用docker run测试它,这样您就可以利用docker网络的优势 在构

因此,我构建了一个RESTAPI微服务,它查询本地Elasticsearch实例,并根据内部协议转换结果。我将其构建到Docker映像中,并希望在构建中对其运行一些单元测试。由于ES连接到一个专用Docker网络,在构建过程中微服务无法访问它,因此测试显然失败了。我想知道,有没有一种方法可以避免这种情况,而不必使用一些复杂的测试框架来进行依赖注入?您如何在工作实践中测试此类容器?

我将构建应用程序而不进行任何测试。然后我将使用
docker run
测试它,这样您就可以利用docker网络的优势

在构建过程中,这比测试更为优雅:

  • docker build-t my_app:1.0-early
    您的应用程序以获取图像
  • docker run——网络我的测试网络我的应用:1.0-early/run\u test\u cases.sh
    。返回正确的退出代码或文本
  • 根据测试成功与否,重新标记:
    docker标记my_app:1.0

  • 您需要已经创建了docker网络(
    docker网络创建我的\u测试\u网络
    ),或者更好地使用docker compose。

    但这意味着我仍然需要自己运行测试并扰乱docker环境,与其在构建时触发测试,而不为测试创建单独的容器,这取决于“我自己”的意思。它可以是一个脚本。想象一下,在一天结束时,docker build为每一层运行一个新的容器。如果您使用一些CI系统(gitlab、jenkins、Bambor、bitbucket管道等),这将使您能够将构建阶段与测试阶段分开。如果它们跨系统边界进行测试,则它们不是单元测试。是的,我后来发现了这一点,我将修复标题