Max*_*lin 6 integration-testing mocking go grpc
全部
我有一个用 go 编写的服务,它通过 gRPC 协议与其他几个服务进行通信。我想为我的服务编写集成测试,但是我无法使用真正的依赖项。
所以,我需要以某种方式模拟依赖项。
对我来说,一个完美的场景是这样的:
我尝试使用https://github.com/jekiapp/gripmock但它不支持所有 protobuff 语法。
什么可以帮助解决我的问题?也许我完全错了,并且有对通信 gRPC 的服务进行集成测试的最佳实践
您可以通过在 docker-compose 文件中定义所有服务来启动您的环境。您还应该在 docker-compose 文件中添加要测试的服务。启动后,您可以在要测试的服务中运行集成测试。
示例 docker-compose 文件:
version: '2.2'
services:
  service-you-want-to-test:
    build: .
    image: service-you-want-to-test
    container_name: service-you-want-to-test
    environment:
      - ENVIRONMENT=${ENVIRONMENT}
      - REDIS_ADDRESSES=[redis:6379]
      - SERVICE_YOU_DEPEND_ON_ENDPOINT=service-you-depend-on:8091
      - DB_HOST=mysql
      - DB_USER=root
    links:
      - redis
      - mysql
      - service-you-depend-on
    depends_on:
      mysql:
        condition: service_healthy
    ports:
      - 8090:8090
  service-you-depend-on:
    image: service-you-depend-on:latest
    container_name: service-you-depend-on
    environment:
      - DB_HOST=mysql
      - DB_USER=root
    links:
      - redis
      - mysql
    depends_on:
      mysql:
        condition: service_healthy
    ports:
      - 8091:8091
  mysql:
    image: mysql:5.7
    container_name: mysql
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: "true"
    volumes:
    - ./.docker/mysql/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
    - ./.docker/mysql/healthcheck-5.7:/var/www/healthcheck
    healthcheck:
      test: "/var/www/healthcheck"
      interval: 5s
      timeout: 5s
      retries: 5
    ports:
    - 3306:3306
  redis:
    image: redis:3.2
    container_name: redis
    ports:
      - 6379:6379
要设置集成环境,您可以使用以下命令:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
docker build -t service-you-want-to-test .
docker-compose up -d redis mysql
docker-compose up -d --build service-you-want-to-test
运行上述命令后,您可以通过命令行执行集成测试:
go test -v path/to/integration_tests/...
因此,您还应该将依赖的服务添加到 docker-compose 文件中,以便您可以在集成测试中实际向它们发送请求。请务必在环境变量中添加这些服务端点,以便您可以覆盖向其发送请求的端点。
为了重置数据库中的数据,您可以编写固定装置。这些装置只是重置数据库、缓存等数据的辅助函数。
| 归档时间: | 
 | 
| 查看次数: | 3814 次 | 
| 最近记录: |