Microsoft.Extensions.Diagnostics.Testing 9.0.0-preview.4.24271.2

Prefix Reserved
This is a prerelease version of Microsoft.Extensions.Diagnostics.Testing.
There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Microsoft.Extensions.Diagnostics.Testing --version 9.0.0-preview.4.24271.2                
NuGet\Install-Package Microsoft.Extensions.Diagnostics.Testing -Version 9.0.0-preview.4.24271.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="Microsoft.Extensions.Diagnostics.Testing" Version="9.0.0-preview.4.24271.2" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Microsoft.Extensions.Diagnostics.Testing --version 9.0.0-preview.4.24271.2                
#r "nuget: Microsoft.Extensions.Diagnostics.Testing, 9.0.0-preview.4.24271.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 Microsoft.Extensions.Diagnostics.Testing as a Cake Addin
#addin nuget:?package=Microsoft.Extensions.Diagnostics.Testing&version=9.0.0-preview.4.24271.2&prerelease

// Install Microsoft.Extensions.Diagnostics.Testing as a Cake Tool
#tool nuget:?package=Microsoft.Extensions.Diagnostics.Testing&version=9.0.0-preview.4.24271.2&prerelease                

Microsoft.Extensions.Diagnostics.Testing

Hand-crafted fakes to make telemetry-related testing easier.

Install the package

From the command-line:

dotnet add package Microsoft.Extensions.Diagnostics.Testing

Or directly in the C# project file:

<ItemGroup>
  <PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" Version="[CURRENTVERSION]" />
</ItemGroup>

Usage Example

Fake logging

These components enable faking logging services for testing purposes.

When using this package, you can register a fake logging provider by one of the following methods:

public static ILoggingBuilder AddFakeLogging(this ILoggingBuilder builder)
public static ILoggingBuilder AddFakeLogging(this ILoggingBuilder builder, IConfigurationSection section)
public static ILoggingBuilder AddFakeLogging(this ILoggingBuilder builder, Action<FakeLogCollectorOptions> configure)

You can also register fake logging in the service collection:

public static IServiceCollection AddFakeLogging(this IServiceCollection services)
public static IServiceCollection AddFakeLogging(this IServiceCollection services, IConfigurationSection section)
public static IServiceCollection AddFakeLogging(this IServiceCollection services, Action<FakeLogCollectorOptions> configure)

After registering the fake logging services, you can resolve the fake logging provider with this method:

public static FakeLogCollector GetFakeLogCollector(this IServiceProvider services)

You can also create an instance of FakeLogger using one of its constructors:

public FakeLogger(FakeLogCollector? collector = null, string? category = null)
public FakeLogger(Action<string> outputSink, string? category = null)

You can then use it right away, for example:

var fakeLogger = new FakeLogger<MyComponent>();

// Optionally, you can set the log level
// fakeLogger.ControlLevel(LogLevel.Debug, enabled: true);

var myComponentUnderTest = new MyComponent(fakeLogger);
myComponentUnderTest.DoWork(); // We assume that the component will produce some logs

FakeLogCollector collector = fakeLogger.Collector; // Collector allows you to access the captured logs
IReadOnlyList<FakeLogRecord> logs = collector.GetSnapshot();
// ... assert that the logs are correct

Metric collector

The MetricCollector allows you to collect metrics in tests. It has a few constructors and you can choose the one that fits your needs:

public MetricCollector(Instrument<T> instrument, TimeProvider? timeProvider = null)
public MetricCollector(ObservableInstrument<T> instrument, TimeProvider? timeProvider = null)
public MetricCollector(object? meterScope, string meterName, string instrumentName, TimeProvider? timeProvider = null)
public MetricCollector(Meter meter, string instrumentName, TimeProvider? timeProvider = null)

When you have an exact instrument, you can use the first two constructors. If you have a meter scope (typically it's IMeterFactory), you can use the third constructor. If you have a meter, use the last one.

Here is an example of how to use the MetricCollector:

using System.Diagnostics.Metrics;
using Microsoft.Extensions.Diagnostics.Testing;

using var meter = new Meter("TestMeter");
using var collector = new MetricCollector<int>(meter, "TestInstrument");

var myComponentUnderTest = new MyComponent(meter);
myComponentUnderTest.DoWork(); // We assume that the component will produce some integer metrics

CollectedMeasurement<int>? measurement = collector.LastMeasurement();
// ... assert that the measurement is correct

Please note that the MetricCollector is generic and you need to specify the type of the metric you want to collect (e.g. int, double, etc.).

Feedback & Contributing

We welcome feedback and contributions in our GitHub repo.

Product 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.  net9.0 is compatible. 
.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 (3)

Showing the top 3 NuGet packages that depend on Microsoft.Extensions.Diagnostics.Testing:

Package Downloads
fm.Extensions.Logging.Testing.MSTest

Logs and reports log messages that have not been handled during UnitTests.

Microsoft.Extensions.Hosting.Testing

Experimental package. Tools for integration testing of apps built with Microsoft.Extensions.Hosting

Lewee.IntegrationTests

Package Description

GitHub repositories (11)

Showing the top 5 popular GitHub repositories that depend on Microsoft.Extensions.Diagnostics.Testing:

Repository Stars
dotnet/orleans
Cloud Native application framework for .NET
MassTransit/MassTransit
Distributed Application Framework for .NET
EventStore/EventStore
EventStoreDB, the event-native database. Designed for Event Sourcing, Event-Driven, and Microservices architectures
Cysharp/MagicOnion
Unified Realtime/API framework for .NET platform and Unity.
dotnet/aspire
Tools, templates, and packages to accelerate building observable, production-ready apps
Version Downloads Last updated
9.0.0-preview.9.24507.7 1,217 10/8/2024
9.0.0-preview.8.24460.1 1,852 9/10/2024
9.0.0-preview.7.24412.10 1,946 8/14/2024
9.0.0-preview.6.24353.1 1,347 7/10/2024
9.0.0-preview.5.24311.7 755 6/11/2024
9.0.0-preview.4.24271.2 1,397 5/21/2024
9.0.0-preview.3.24209.3 8,213 4/11/2024
9.0.0-preview.2.24157.4 797 3/12/2024
9.0.0-preview.1.24108.1 1,357 2/13/2024
8.10.0 61,539 10/8/2024
8.9.1 106,319 9/6/2024
8.9.0 12,781 9/5/2024
8.8.0 89,368 8/13/2024
8.7.0 112,090 7/10/2024
8.6.0 75,417 6/11/2024
8.5.0 79,291 5/14/2024
8.4.0 58,329 4/9/2024
8.3.0 80,708 3/12/2024
8.2.0 63,526 2/13/2024
8.1.0 44,761 1/9/2024
8.0.0 43,732 11/14/2023