fridujo / rabbitmq-mock

Mock for RabbitMQ Java amqp-client
Apache License 2.0
176 stars 32 forks source link
amqp amqp-client hacktoberfest java mock rabbitmq rabbitmq-java testing

RabbitMQ-mock

Build Status Coverage Status Maven Central JitPack License FOSSA Status

Mock for RabbitMQ Java amqp-client.

Compatible with versions 4.0.0 to 5+ of com.rabbitmq:amqp-client

Compatible with versions 3.6.3 to 4.0.0 with the com.github.fridujo.rabbitmq.mock.compatibility package.

Motivation

This project aims to emulate RabbitMQ behavior for test purposes, through com.rabbitmq.client.ConnectionFactory with MockConnectionFactory.

However today, you will have more robust results using a real RabbitMQ instance through the use of Testcontainers.

If Docker is not an acceptable option, you can still rely on RabbitMQ-mock.

Example Use

Replace the use of com.rabbitmq.client.ConnectionFactory by MockConnectionFactory

ConnectionFactory factory = new MockConnectionFactory();
try (Connection conn = factory.newConnection()) {
    try (Channel channel = conn.createChannel()) {
        GetResponse response = channel.basicGet(queueName, autoAck);
        byte[] body = response.getBody();
        long deliveryTag = response.getEnvelope().getDeliveryTag();

        // Do what you need with the body

        channel.basicAck(deliveryTag, false);
    }
}

More details in integration-test

With Spring

Change underlying RabbitMQ ConnectionFactory by MockConnectionFactory


@Configuration
@Import(AppConfiguration.class)
class TestConfiguration {
    @Bean
    ConnectionFactory connectionFactory() {
        return new CachingConnectionFactory(new MockConnectionFactory());
    }
}

More details in integration-test

Contribute

Any contribution is greatly appreciated. Please check out the guide for more details.

Open in Gitpod

Getting Started

Maven

Add the following dependency to your pom.xml

<dependency>
    <groupId>com.github.fridujo</groupId>
    <artifactId>rabbitmq-mock</artifactId>
    <version>${rabbitmq-mock.version}</version>
    <scope>test</scope>
</dependency>

Gradle

Add the following dependency to your build.gradle

repositories {
    mavenCentral()
}

// ...

dependencies {
    // ...
    testCompile('com.github.fridujo:rabbitmq-mock:$rabbitmqMockVersion')
    // ...
}

Building from Source

You need [JDK-17(https://adoptium.net/temurin/releases/?version=17&package=jdk) to build RabbitMQ-Mock. The project can be built with Maven using the following command.

./mvnw install

Tests are split in:

Using the latest SNAPSHOT

The master of the project pushes SNAPSHOTs in Sonatype's repo.

To use the latest master build add Sonatype OSS snapshot repository, for Maven:

<repositories>
    ...
    <repository>
        <id>sonatype-oss-spanshots</id>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </repository>
</repositories>

For Gradle:

repositories {
    // ...
    maven {
        url "https://oss.sonatype.org/content/repositories/snapshots"
    }
}

License

FOSSA Status