NUnit Adapter

Package: FluentDocker.Testing.NUnit

Step by Step

Helper Methods

NUnitResourceHelpers provides static async methods for use with NUnit’s [OneTimeSetUp] and [OneTimeTearDown], or per-test [SetUp]/[TearDown].

OneTimeSetUp Example

[TestFixture]
public class RedisTests
{
    private FluentDockerKernel _kernel;
    private ContainerResource _resource;

    [OneTimeSetUp]
    public async Task Setup()
    {
        (_kernel, _resource) = await NUnitResourceHelpers.CreateContainerAsync(
            builder => builder
                .UseImage("redis:alpine")
                .WaitForPort("6379/tcp"));
    }

    [OneTimeTearDown]
    public async Task Teardown()
    {
        await NUnitResourceHelpers.DisposeAsync(_resource, _kernel);
    }

    [Test]
    public async Task Redis_IsRunning()
    {
        var info = await _resource.InspectAsync();
        Assert.That(info.State.Running, Is.True);
    }
}

Assembly-Level SetUpFixture

[SetUpFixture]
public class GlobalDockerSetup
{
    private FluentDockerKernel _kernel;
    private ContainerResource _resource;

    [OneTimeSetUp]
    public async Task Setup()
    {
        (_kernel, _resource) = await NUnitResourceHelpers.CreateContainerAsync(
            builder => builder.UseImage("redis:alpine"));
    }

    [OneTimeTearDown]
    public async Task Teardown()
    {
        await NUnitResourceHelpers.DisposeAsync(_resource, _kernel);
    }
}

Compose Example

[OneTimeSetUp]
public async Task Setup()
{
    (_kernel, _resource) = await NUnitResourceHelpers.CreateComposeAsync(
        c => c
            .WithComposeFile("docker-compose.yml")
            .WithRemoveOrphans());
}

Swarm Stack Example

[OneTimeSetUp]
public async Task Setup()
{
    (_kernel, _resource) = await NUnitResourceHelpers.CreateSwarmStackAsync(
        new StackDeployConfig
        {
            StackName = "my-stack",
            ComposeFiles = { "docker-compose.yml" }
        });
}

Podman Kubernetes Example

[OneTimeSetUp]
public async Task Setup()
{
    (_kernel, _resource) = await NUnitResourceHelpers.CreatePodmanKubernetesAsync(
        new KubePlayConfig { YamlPath = "pod.yaml" },
        kernelFactory: async () => await FluentDockerKernel.Create()
            .WithPodmanCli("podman", d => d.AsDefault())
            .BuildAsync());
}

Generic / Custom Resource

Use CreateResourceAsync<T> for plugin or custom ITestResource types:

[OneTimeSetUp]
public async Task Setup()
{
    (_kernel, _resource) = await NUnitResourceHelpers.CreateResourceAsync<ContainerResource>(
        kernel => new ContainerResource(kernel,
            c => c.UseImage("redis:alpine").WaitForPort("6379/tcp")));
}