Microsoft.Extensions.Diagnostics.Testing 9.4.0

Prefix Reserved
dotnet add package Microsoft.Extensions.Diagnostics.Testing --version 9.4.0
                    
NuGet\Install-Package Microsoft.Extensions.Diagnostics.Testing -Version 9.4.0
                    
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.4.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Microsoft.Extensions.Diagnostics.Testing" Version="9.4.0" />
                    
Directory.Packages.props
<PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Microsoft.Extensions.Diagnostics.Testing --version 9.4.0
                    
#r "nuget: Microsoft.Extensions.Diagnostics.Testing, 9.4.0"
                    
#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.
#addin nuget:?package=Microsoft.Extensions.Diagnostics.Testing&version=9.4.0
                    
Install Microsoft.Extensions.Diagnostics.Testing as a Cake Addin
#tool nuget:?package=Microsoft.Extensions.Diagnostics.Testing&version=9.4.0
                    
Install Microsoft.Extensions.Diagnostics.Testing as a Cake Tool

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.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.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 (7)

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

Package Downloads
Lombiq.Tests.UI

Lombiq UI Testing Toolbox for Orchard Core: Web UI testing toolbox mostly for Orchard Core applications. Everything you need to do UI testing with Selenium for an Orchard app is here. See the project website for detailed documentation.

Microsoft.Extensions.Hosting.Testing

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

fm.Extensions.Logging.Testing.MSTest

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

Lewee.IntegrationTests

Package Description

Maris.Logging.Testing

Provides functionality to display log output in Test Explorer and to verify the log output within the test code when the test object requires an ILogger object.

GitHub repositories (15)

Showing the top 15 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
kurrent-io/EventStore
EventStoreDB, the event-native database. Designed for Event Sourcing, Event-Driven, and Microservices architectures
dotnet/aspire
Tools, templates, and packages to accelerate building observable, production-ready apps
Cysharp/MagicOnion
Unified Realtime/API framework for .NET platform and Unity.
testcontainers/testcontainers-dotnet
A library to support tests with throwaway instances of Docker containers for all compatible .NET Standard versions.
Azure/azure-functions-host
The host/runtime that powers Azure Functions
DuendeSoftware/products
The most flexible and standards-compliant OpenID Connect and OAuth 2.x framework for ASP.NET Core
CodeMazeBlog/CodeMazeGuides
The main repository for all the Code Maze guides
dotnet/aspire-samples
bdovaz/UnityNuGet
Provides a service to install NuGet packages into a Unity project via the Unity Package Manager
dotnet/dotnet
Home of .NET's Virtual Monolithic Repository which includes all the code needed to build the .NET SDK.
asyncapi/saunter
Saunter is a code-first AsyncAPI documentation generator for dotnet.
SapiensAnatis/Dawnshard
Server emulator for Dragalia Lost
AdGoBye/AdGoBye
Content / Adblock for Social VR
Version Downloads Last updated
9.4.0 3,409 3 days ago
9.3.0 112,460 a month ago
9.2.0 163,354 2 months ago
9.1.0 150,096 3 months ago
9.0.0 196,818 5 months ago
9.0.0-preview.9.24507.7 4,369 6 months ago
9.0.0-preview.8.24460.1 2,239 7 months ago
9.0.0-preview.7.24412.10 2,423 8 months ago
9.0.0-preview.6.24353.1 1,624 9 months ago
9.0.0-preview.5.24311.7 877 10 months ago
9.0.0-preview.4.24271.2 2,383 5/21/2024
9.0.0-preview.3.24209.3 14,911 4/11/2024
9.0.0-preview.2.24157.4 849 3/12/2024
9.0.0-preview.1.24108.1 2,149 2/13/2024
8.10.0 483,897 6 months ago
8.9.1 161,642 7 months ago
8.9.0 17,038 7 months ago
8.8.0 152,815 8 months ago
8.7.0 156,077 9 months ago
8.6.0 126,171 10 months ago
8.5.0 111,716 5/14/2024
8.4.0 75,134 4/9/2024
8.3.0 88,645 3/12/2024
8.2.0 67,938 2/13/2024
8.1.0 57,259 1/9/2024
8.0.0 83,450 11/14/2023