Skip to content

Azure Event Hubs

Azure Event Hubs emulator⁠ is designed to offer a local development experience for Azure Event Hubs⁠, enabling you to develop and test code against the service in isolation, free from cloud interference.

Add the following dependency to your project file:

NuGet
1
dotnet add package Testcontainers.EventHubs

You can start an Azure Event Hubs container instance from any .NET application. Here, we create different container instances and pass them to the base test class. This allows us to test different configurations.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
[UsedImplicitly]
public sealed class EventHubsDefaultAzuriteConfiguration : EventHubsContainerTest
{
    public EventHubsDefaultAzuriteConfiguration()
        : base(new EventHubsBuilder()
            .WithAcceptLicenseAgreement(true)
            .WithConfigurationBuilder(GetServiceConfiguration())
            .Build())
    {
    }
}

This example uses xUnit.net's IAsyncLifetime interface to manage the lifecycle of the container. The container is started in the InitializeAsync method before the test method runs, ensuring that the environment is ready for testing. After the test completes, the container is removed in the DisposeAsync method.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
public Task InitializeAsync()
{
    return _eventHubsContainer.StartAsync();
}

public Task DisposeAsync()
{
    return _eventHubsContainer.DisposeAsync().AsTask();
}

private static EventHubsServiceConfiguration GetServiceConfiguration()
{
    return EventHubsServiceConfiguration.Create().WithEntity(EventHubsName, 2, EventHubsConsumerGroupName);
}

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task SendEventDataBatchShouldNotThrowException()
{
    // Given
    var message = Guid.NewGuid().ToString();

    await using var client = new EventHubProducerClient(_eventHubsContainer.GetConnectionString(), EventHubsName);

    // When
    var properties = await client.GetEventHubPropertiesAsync()
        .ConfigureAwait(true);

    using var eventDataBatch = await client.CreateBatchAsync()
        .ConfigureAwait(true);

    eventDataBatch.TryAdd(new EventData(message));

    await client.SendAsync(eventDataBatch)
        .ConfigureAwait(true);

    // Then
    Assert.NotNull(properties);
}

The test example uses the following NuGet dependencies:

1
2
3
4
5
<PackageReference Include="Microsoft.NET.Test.Sdk"/>
<PackageReference Include="coverlet.collector"/>
<PackageReference Include="xunit.runner.visualstudio"/>
<PackageReference Include="xunit"/>
<PackageReference Include="Azure.Messaging.EventHubs"/>

To execute the tests, use the command dotnet test from a terminal.

Tip

For the complete source code of this example and additional information, please refer to our test projects.

Use a custom Azurite instance

The Event Hubs module depends on an Azurite container instance. The module automatically creates and configures the necessary resources and connects them. If you prefer to use your own instance, you can use the following method to configure the builder accordingly:

1
.WithAzuriteContainer(fixture.Network, fixture.Container, DatabaseFixture.AzuriteNetworkAlias)