Skip to content

Apache Cassandra

Apache Cassandra is a powerful, open-source, distributed NoSQL database that is highly available and fault-tolerant, used to store, manage, and retrieve structured data.

Add the following dependency to your project file:

NuGet
1
dotnet add package Testcontainers.Cassandra

You can start an Apache Cassandra container instance from any .NET application. 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
40
41
42
43
44
45
46
47
48
private readonly CassandraContainer _cassandraContainer = new CassandraBuilder().Build();

public Task InitializeAsync()
{
    return _cassandraContainer.StartAsync();
}

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

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public void ConnectionStateReturnsOpen()
{
    // Given
    using DbConnection connection = new CqlConnection(_cassandraContainer.GetConnectionString());

    // When
    connection.Open();

    // Then
    Assert.Equal(ConnectionState.Open, connection.State);
}

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public void ExecuteCqlStatementReturnsExpectedResult()
{
    // Given
    const string selectFromSystemLocalStatement = "SELECT * FROM system.local WHERE key = ?;";

    using var cluster = Cluster.Builder().WithConnectionString(_cassandraContainer.GetConnectionString()).Build();

    // When
    using var session = cluster.Connect();

    var preparedStatement = session.Prepare(selectFromSystemLocalStatement);
    var boundStatement = preparedStatement.Bind("local");
    using var rowSet = session.Execute(boundStatement);
    var rows = rowSet.GetRows().ToImmutableList();

    // Then
    Assert.True(rowSet.IsFullyFetched);
    Assert.Single(rows);
    Assert.Equal("COMPLETED", rows[0]["bootstrapped"]);
}

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="CassandraCSharpDriver"/>

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.