Skip to content

Neo4j

Neo4j is a graph database designed to work with nodes and edges. It is an ACID-compliant transactional graph database engine, and developers can communicate with it using the HTTP endpoint or by using the Bolt protocol.

Add the following dependency to your project file:

NuGet
1
dotnet add package Testcontainers.Neo4j

You can start an Neo4j 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
12
13
14
15
16
17
18
19
20
21
[UsedImplicitly]
public sealed class Neo4jDefaultConfiguration : Neo4jContainerTest
{
    public Neo4jDefaultConfiguration()
        : base(new Neo4jBuilder().Build())
    {
    }

    public override string Edition => "community";
}

[UsedImplicitly]
public sealed class Neo4jEnterpriseEditionConfiguration : Neo4jContainerTest
{
    public Neo4jEnterpriseEditionConfiguration()
        : base(new Neo4jBuilder().WithEnterpriseEdition(true).Build())
    {
    }

    public override string Edition => "enterprise";
}

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
public Task InitializeAsync()
{
    return _neo4jContainer.StartAsync();
}

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

[Fact]
[Trait(nameof(DockerCli.DockerPlatform), nameof(DockerCli.DockerPlatform.Linux))]
public async Task SessionReturnsDatabase()
{
    // Given
    const string neo4jDatabase = "neo4j";

    using var driver = GraphDatabase.Driver(_neo4jContainer.GetConnectionString());

    // When
    using var session = driver.AsyncSession(sessionConfigBuilder => sessionConfigBuilder.WithDatabase(neo4jDatabase));

    var result = await session.RunAsync("CALL dbms.components() YIELD edition RETURN edition")
        .ConfigureAwait(true);

    var record = await result.SingleAsync()
        .ConfigureAwait(true);

    var edition = record["edition"].As<string>();

    // Then
    Assert.Equal(neo4jDatabase, session.SessionConfig.Database);
    Assert.Equal(Edition, edition);
}

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="Neo4j.Driver"/>

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.