Back to Repositories

Testing RabbitMQ Broadcast Message Production in SpringBoot-Labs

This test suite evaluates the RabbitMQ broadcast messaging functionality in a Spring Boot application. It focuses on validating synchronous message broadcasting capabilities and includes mock testing scenarios for message producer components.

Test Coverage Overview

The test coverage encompasses synchronous message broadcasting and mock scenarios in RabbitMQ implementation.

  • Tests synchronous message sending with multiple iterations
  • Validates message ID generation and delivery
  • Includes mock testing capabilities
  • Ensures proper message consumption through blocking mechanisms

Implementation Analysis

The testing approach utilizes Spring Boot’s testing framework with JUnit integration. It implements a producer-based testing pattern with synchronous message sending and verification.

  • Uses SpringRunner for test execution
  • Implements CountDownLatch for consumption verification
  • Leverages Spring Boot’s autowiring for producer injection
  • Includes logging for operation tracking

Technical Details

  • JUnit 4 testing framework
  • Spring Boot Test context
  • SLF4J logging implementation
  • RabbitMQ message broker integration
  • CountDownLatch for synchronization
  • SpringRunner test runner

Best Practices Demonstrated

The test suite demonstrates several testing best practices for message-based systems.

  • Proper test isolation using Spring Boot test context
  • Systematic message ID generation
  • Appropriate blocking mechanisms for async operations
  • Structured logging for test execution tracking
  • Clear separation of mock and actual testing scenarios

yudaocode/springboot-labs

lab-04-rabbitmq/lab-04-rabbitmq-demo-message-model/src/test/java/cn/iocoder/springboot/lab04/rabbitmqdemo/producer/BroadcastProducerTest.java

            
package cn.iocoder.springboot.lab04.rabbitmqdemo.producer;

import cn.iocoder.springboot.lab04.rabbitmqdemo.Application;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.util.concurrent.CountDownLatch;

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
public class BroadcastProducerTest {

    private Logger logger = LoggerFactory.getLogger(getClass());

    @Autowired
    private BroadcastProducer producer;

    @Test
    public void mock() throws InterruptedException {
        // 阻塞等待,保证消费
        new CountDownLatch(1).await();
    }

    @Test
    public void testSyncSend() throws InterruptedException {
        for (int i = 0; i < 3; i++) {
            int id = (int) (System.currentTimeMillis() / 1000);
            producer.syncSend(id);
            logger.info("[testSyncSend][发送编号:[{}] 发送成功]", id);
        }

        // 阻塞等待,保证消费
        new CountDownLatch(1).await();
    }

}