java - Junit 5 功能测试 Micronaut 消息驱动应用程序
问题描述
我有一个 Rabbit MQ Micronaut 消息驱动应用程序。该应用程序仅包含消费者端,生产者端在另一个 REST API 应用程序上。
现在我只想在消费者端执行 JUnit 5 测试。试图获得测试仅包含 Rabbit MQ 侦听器的消息驱动应用程序的最佳想法
@RabbitListener
public record CategoryListener(IRepository repository) {
@Queue(ConstantValues.ADD_CATEGORY)
public CategoryViewModel Create(CategoryViewModel model) {
LOG.info(String.format("Listener --> Adding the product to the product collection"));
Category category = new Category(model.name(), model.description());
return Single.fromPublisher(this.repository.getCollection(ConstantValues.PRODUCT_CATEGORY_COLLECTION_NAME, Category.class)
.insertOne(category)).map(success->{
return new CategoryViewModel(
success.getInsertedId().asObjectId().getValue().toString(),
category.getName(),
category.getDescription());
}).blockingGet();
}
}
经过一番研究,我发现我们可以Testcontainers
用于集成测试,在我的例子中,生产者和接收者在不同的服务器上。所以我需要在测试环境中RabbitClient
为每个创建RabbitListener
还是有什么方法可以模拟RabbitClient
@MicronautTest
@Testcontainers
public class CategoryListenerTest {
@Container
private static final RabbitMQContainer RABBIT_MQ_CONTAINER = new RabbitMQContainer("rabbitmq")
.withExposedPorts(5672, 15672);
@Test
@DisplayName("Rabbit MQ container should be running")
void rabbitMqContainerShouldBeRunning() {
Assertions.assertTrue(RABBIT_MQ_CONTAINER.isRunning());
}
}
执行 Micronaut 消息驱动应用程序功能测试的最佳方法是什么?在这个问题中,我在另一个应用程序上有一个生产者。所以我不能注入生产者客户端。如何在 LISTENER 端测试此功能?
解决方案
使用 java api创建生产者@RabbitClient
或直接使用 java api
推荐阅读
- python - python tkinter Radiobuttons - 在显示之前选择两个按钮
- c# - 带有可选参数的 C# 编写的 VBA 函数(COM 插件)
- jquery - CSS 设计无法创建样式和徽标
- peoplesoft - 将用户从 PeopleSoft HRMS 同步到外部应用程序
- javascript - 如何在 React 中使用路由?
- javers - JaversException PROPERTY_NOT_FOUND:在抽象类中找不到派生类中的属性
- php - 无法使用 File::deleteDirectory 删除文件夹
- c# - Unity 中的条带集成
- r - 如何在 RStudio 中重新编码矢量
- c# - 加载 https://localhost 失败:
/api/try: 没有“访问控制允许来源”