Workleap.Extensions.Xunit
1.1.1-preview.3
Prefix Reserved
dotnet add package Workleap.Extensions.Xunit --version 1.1.1-preview.3
NuGet\Install-Package Workleap.Extensions.Xunit -Version 1.1.1-preview.3
<PackageReference Include="Workleap.Extensions.Xunit" Version="1.1.1-preview.3" />
paket add Workleap.Extensions.Xunit --version 1.1.1-preview.3
#r "nuget: Workleap.Extensions.Xunit, 1.1.1-preview.3"
// Install Workleap.Extensions.Xunit as a Cake Addin #addin nuget:?package=Workleap.Extensions.Xunit&version=1.1.1-preview.3&prerelease // Install Workleap.Extensions.Xunit as a Cake Tool #tool nuget:?package=Workleap.Extensions.Xunit&version=1.1.1-preview.3&prerelease
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.
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 sharedIConfiguration
. - Access the generated
IConfiguration
throughthis.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'sITestOutputHelper
. - Access the
IServiceProvider
which has been configured by the fixture throughthis.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 defaultIHostEnvironment
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
addsappsettings.json
andappsettings.{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 | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. 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. |
-
.NETFramework 4.6.2
- Microsoft.Extensions.Configuration (>= 8.0.0)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 8.0.0)
- Microsoft.Extensions.Configuration.Json (>= 8.0.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.1)
- Microsoft.Extensions.Logging (>= 8.0.1)
- Microsoft.Extensions.Logging.Configuration (>= 8.0.1)
- xunit.core (>= 2.9.2)
-
net8.0
- Microsoft.Extensions.Configuration (>= 8.0.0)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 8.0.0)
- Microsoft.Extensions.Configuration.Json (>= 8.0.1)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.2)
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.1)
- Microsoft.Extensions.Logging (>= 8.0.1)
- Microsoft.Extensions.Logging.Configuration (>= 8.0.1)
- xunit.core (>= 2.9.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.