Workleap.Extensions.Xunit 1.0.2

The ID prefix of this package has been reserved for one of the owners of this package by NuGet.org. Prefix Reserved
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Workleap.Extensions.Xunit --version 1.0.2
NuGet\Install-Package Workleap.Extensions.Xunit -Version 1.0.2
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Workleap.Extensions.Xunit" Version="1.0.2" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Workleap.Extensions.Xunit --version 1.0.2
#r "nuget: Workleap.Extensions.Xunit, 1.0.2"
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Workleap.Extensions.Xunit as a Cake Addin
#addin nuget:?package=Workleap.Extensions.Xunit&version=1.0.2

// Install Workleap.Extensions.Xunit as a Cake Tool
#tool nuget:?package=Workleap.Extensions.Xunit&version=1.0.2

Workleap.Extensions.Xunit

An opinionated library that provides base unit test and fixture classes based on the Microsoft.Extensions.* packages used by modern .NET applications.

nuget build

Getting started

There are base classes for unit and integration tests. Each test method has its own service collection configured through a class fixture.

Unit tests

Create a test class that extends BaseUnitTest<> and accepts a class fixture that extends BaseUnitFixture.

In the fixture class, you can:

  • Override ConfigureServices(services) to add, remove or update dependencies for each test method.
  • Override ConfigureConfiguration(builder) to makes changes to the generated shared IConfiguration.
  • Access the generated IConfiguration through this.Configuration.

In the test class, you can:

  • Access the fixture through this.Fixture.
  • Access the .NET logger through this.Logger - it is connected to the Xunit's ITestOutputHelper.
  • Access the IServiceProvider which has been configured by the fixture through this.Services.

By default, unit tests come with an xunit-connected ILogger and an empty IConfiguration.

Integration tests

Create a test class that extends BaseIntegrationTest<> and accepts a class fixture that extends BaseIntegrationFixture. They both inherit from their respective BaseUnit* class.

  • BaseIntegrationFixture adds a default IHostEnvironment where its environment name is:

    • Local by default,
    • Test on CI environments,
    • overrideable by defining a DOTNET_ENVIRONMENT environment variable, such as in .NET modern applications.
  • BaseIntegrationFixture adds appsettings.json and appsettings.{environment}.json optional configuration providers and also an environment variable configuration provider.

Example

public class MyUnitTests : BaseUnitTest<MyUnitFixture>
{
    public MyUnitTests(MyUnitFixture fixture, ITestOutputHelper testOutputHelper)
        : base(fixture, testOutputHelper)
    {
    }

    [Fact]
    public void Some_Test_Works()
    {
        var myClass = this.Services.GetRequiredService<MyClass>();
        myClass.DoWork();
    }
}

public class MyUnitFixture : BaseUnitFixture
{
    protected override IConfigurationBuilder ConfigureConfiguration(IConfigurationBuilder builder)
    {
        // Executed once per fixture instance
        return base.ConfigureConfiguration(builder).AddInMemoryCollection(new Dictionary<string, string>
        {
            ["My:Config:Variable"] = "foo",
        });
        
        // In an integration fixture, you could add concrete configuration providers, such as:
        // builder.AddAzureKeyVault(...);
    }

    public override IServiceCollection ConfigureServices(IServiceCollection services)
    {
        // Executed for each test method
        return base.ConfigureServices(services)
            .AddTransient<MyClass>()
            .AddTransient<IDependency>(new MyFakeDependency());
    }
}

Contribute

Please see CONTRIBUTING

License

Copyright © 2022, Workleap. This code is licensed under the Apache License, Version 2.0. You may obtain a copy of this license at https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Framework net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.3-preview.29 45 5/31/2024
1.0.3-preview.28 42 5/31/2024
1.0.3-preview.27 41 5/21/2024
1.0.3-preview.26 49 5/10/2024
1.0.3-preview.25 36 5/3/2024
1.0.3-preview.24 55 4/15/2024
1.0.3-preview.23 54 4/12/2024
1.0.3-preview.22 49 4/3/2024
1.0.3-preview.21 45 3/8/2024
1.0.3-preview.20 43 3/7/2024
1.0.3-preview.19 54 3/4/2024
1.0.3-preview.18 53 3/1/2024
1.0.3-preview.17 45 2/16/2024
1.0.3-preview.16 51 2/6/2024
1.0.3-preview.15 45 2/6/2024
1.0.3-preview.14 48 1/22/2024
1.0.3-preview.13 52 1/12/2024
1.0.3-preview.12 45 1/12/2024
1.0.3-preview.11 44 1/12/2024
1.0.3-preview.10 65 12/18/2023
1.0.3-preview.9 82 11/26/2023
1.0.3-preview.8 63 11/17/2023
1.0.3-preview.7 60 11/7/2023
1.0.3-preview.6 62 10/30/2023
1.0.3-preview.5 67 10/13/2023
1.0.3-preview.4 64 9/26/2023
1.0.3-preview.3 65 9/25/2023
1.0.3-preview.2 56 9/20/2023
1.0.3-preview.1 57 9/20/2023
1.0.2 14,006 7/20/2023
1.0.2-preview.14 76 7/20/2023