JUnit5功能测试micronaut消息驱动的应用程序

yws3nbqq  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(348)

我有一个rabbit mq micronaut消息驱动的应用程序。应用程序只包含使用者端,生产者端在另一个restapi应用程序上。
现在我只想对使用者端执行junit5测试。尝试获得测试仅包含rabbitmq侦听器的消息驱动应用程序的最佳想法

  1. @RabbitListener
  2. public record CategoryListener(IRepository repository) {
  3. @Queue(ConstantValues.ADD_CATEGORY)
  4. public CategoryViewModel Create(CategoryViewModel model) {
  5. LOG.info(String.format("Listener --> Adding the product to the product collection"));
  6. Category category = new Category(model.name(), model.description());
  7. return Single.fromPublisher(this.repository.getCollection(ConstantValues.PRODUCT_CATEGORY_COLLECTION_NAME, Category.class)
  8. .insertOne(category)).map(success->{
  9. return new CategoryViewModel(
  10. success.getInsertedId().asObjectId().getValue().toString(),
  11. category.getName(),
  12. category.getDescription());
  13. }).blockingGet();
  14. }
  15. }

经过研究,我发现我们可以使用 Testcontainers 对于集成测试,在我的例子中,生产者和接收者在不同的服务器上。所以我需要创造 RabbitClient 对于每个 RabbitListener 在测试环境中或者有什么方法可以模拟 RabbitClient ```
@MicronautTest
@Testcontainers
public class CategoryListenerTest {

  1. @Container
  2. private static final RabbitMQContainer RABBIT_MQ_CONTAINER = new RabbitMQContainer("rabbitmq")
  3. .withExposedPorts(5672, 15672);
  4. @Test
  5. @DisplayName("Rabbit MQ container should be running")
  6. void rabbitMqContainerShouldBeRunning() {
  7. Assertions.assertTrue(RABBIT_MQ_CONTAINER.isRunning());
  8. }

}

  1. micronaut消息驱动的应用程序执行功能测试的最佳方法是什么?在这个问题上,我有另一个应用程序的生产者。所以我不能给制作人客户注射。如何在侦听器端测试此函数?
laik7k3q

laik7k3q1#

创建生产者 @RabbitClient 或者直接使用javaapi

相关问题