Ian*_*nes 12 java spring integration-testing spring-boot amazon-kinesis
我目前正在开发一系列需要与Kinesis集成的Web服务 - 实现已经完成,但我们有一系列集成测试(我们的Web服务都使用Spring Boot,所以我们使用@WebIntegrationTest我们的测试类上的注释用于启动服务器的本地实例,然后使用TestRestTemplate调用我们的资源,这些资源当前正在尝试并且无法连接到真正的Kinesis.
虽然在普通的单元测试中模拟对Kinesis库中方法的调用并不是一个问题,但是我们无法在集成测试中真正做到这一点,因为整个应用程序堆栈都与Spring连接.对于其他一些事情(例如OAuth2和对其他Web服务的调用),我们已经能够使用WireMock来模拟实际的端点 - 我真正想做的是以这种方式使用WireMock来模拟调用AmazonKinesisClient,但我找不到有关如何执行此操作的任何建议.
或者,我已经看到一些AWS组件具有由第三方编写的测试库,这些测试库允许您运行它的本地版本(例如:DynamoDbLocal),但无法为Kinesis找到这样的解决方案.
有人能就如何与Kinesis运行集成测试给我一些建议吗?
提供解决方案可能已经太晚了,但我将添加我的团队在本地复制AWS资源所做的工作,因为我们使用了大量的Kinesis,DynamoDb,S3和cloudWatch.
我们已经在Localstack创建了包装器 - > https://github.com/localstack/localstack,它允许我们使用docker 容器来启动必要服务的本地实例docker-compose
.
我们的典型docker-compose.yml
文件如下:
version: '2'
services:
localstack:
image: "localstack/localstack"
environment:
- SERVICES=kinesis,dynamodb,cloudwatch
ports:
- "4568"
- "4569"
- "4582"
Run Code Online (Sandbox Code Playgroud)
然后,在集成测试的设置阶段,我们的包装器将启动docker-compose up
并针对本地基础结构运行测试.在拆卸过程中,包装机会杀死容器.
小智 1
我遇到了同样的问题,到目前为止我发现的唯一模拟实现是一个 Nodejs 实现: https: //github.com/mhart/kinesalite 它确实有效 - 我设法针对它运行我的 Java Kinesis 客户端,只需在 kinesis.properties 上设置端点:
kinesisEndpoint=http://localhost:4567
Run Code Online (Sandbox Code Playgroud)
缺点是在构建时测试期间使用它并不是一件容易的事 - 需要找到一种在测试之前启动模拟运动的方法(使用 Maven 插件或其他东西),但还没有实现。
归档时间: |
|
查看次数: |
5859 次 |
最近记录: |