Microsoft.Extensions.Diagnostics.Testing
9.0.0
Prefix Reserved
dotnet add package Microsoft.Extensions.Diagnostics.Testing --version 9.0.0
NuGet\Install-Package Microsoft.Extensions.Diagnostics.Testing -Version 9.0.0
<PackageReference Include="Microsoft.Extensions.Diagnostics.Testing" Version="9.0.0" />
paket add Microsoft.Extensions.Diagnostics.Testing --version 9.0.0
#r "nuget: Microsoft.Extensions.Diagnostics.Testing, 9.0.0"
// Install Microsoft.Extensions.Diagnostics.Testing as a Cake Addin #addin nuget:?package=Microsoft.Extensions.Diagnostics.Testing&version=9.0.0 // Install Microsoft.Extensions.Diagnostics.Testing as a Cake Tool #tool nuget:?package=Microsoft.Extensions.Diagnostics.Testing&version=9.0.0
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 | 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. 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. |
-
.NETFramework 4.6.2
- Microsoft.Bcl.TimeProvider (>= 8.0.1)
- Microsoft.Extensions.Logging (>= 8.0.1)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 8.0.0)
- Microsoft.Extensions.Telemetry.Abstractions (>= 9.0.0)
- System.Diagnostics.DiagnosticSource (>= 8.0.1)
-
net8.0
- Microsoft.Extensions.Logging (>= 8.0.1)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 8.0.0)
- Microsoft.Extensions.Telemetry.Abstractions (>= 9.0.0)
-
net9.0
- Microsoft.Extensions.Logging (>= 9.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 9.0.0)
- Microsoft.Extensions.Telemetry.Abstractions (>= 9.0.0)
NuGet packages (4)
Showing the top 4 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 |
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
|
|
dotnet/aspire
Tools, templates, and packages to accelerate building observable, production-ready apps
|
|
Cysharp/MagicOnion
Unified Realtime/API framework for .NET platform and Unity.
|
Version | Downloads | Last updated |
---|---|---|
9.0.0 | 53,942 | 11/12/2024 |
9.0.0-preview.9.24507.7 | 3,662 | 10/8/2024 |
9.0.0-preview.8.24460.1 | 2,025 | 9/10/2024 |
9.0.0-preview.7.24412.10 | 2,334 | 8/14/2024 |
9.0.0-preview.6.24353.1 | 1,501 | 7/10/2024 |
9.0.0-preview.5.24311.7 | 800 | 6/11/2024 |
9.0.0-preview.4.24271.2 | 1,695 | 5/21/2024 |
9.0.0-preview.3.24209.3 | 10,642 | 4/11/2024 |
9.0.0-preview.2.24157.4 | 817 | 3/12/2024 |
9.0.0-preview.1.24108.1 | 1,484 | 2/13/2024 |
8.10.0 | 239,420 | 10/8/2024 |
8.9.1 | 129,477 | 9/6/2024 |
8.9.0 | 14,270 | 9/5/2024 |
8.8.0 | 111,804 | 8/13/2024 |
8.7.0 | 129,139 | 7/10/2024 |
8.6.0 | 89,837 | 6/11/2024 |
8.5.0 | 89,853 | 5/14/2024 |
8.4.0 | 65,519 | 4/9/2024 |
8.3.0 | 82,944 | 3/12/2024 |
8.2.0 | 66,017 | 2/13/2024 |
8.1.0 | 48,698 | 1/9/2024 |
8.0.0 | 55,125 | 11/14/2023 |