Extends Verify to allow verification of OpenTelemetry types including System.Diagnostics.Activity and LogRecord
See Milestones for release notes.
Entity Framework Extensions is a major sponsor and is proud to contribute to the development this project.
[ModuleInitializer]
public static void Initialize() =>
VerifyOpenTelemetry.Initialize();VerifyOpenTelemetry allows, when a method is being tested, for any Activity created as part of that method call to be recorded and verified.
Call Recording.Start() to begin listening. All activities from any ActivitySource will be captured by default.
[Fact]
public Task Usage()
{
Recording.Start();
using var source = new ActivitySource("TestSource");
using (var activity = source.StartActivity("MyOperation"))
{
activity!.SetTag("key1", "value1");
activity.SetTag("key2", 42);
}
return Verify("result");
}Results in:
{
target: result,
activity: {
MyOperation: {
Tags: {
key1: value1,
key2: 42
}
}
}
}OpenTelemetry LogRecord instances can be captured using InMemoryExporter and verified directly.
[Fact]
public Task LogRecordVerification()
{
var logRecords = new List<LogRecord>();
using var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddOpenTelemetry(options =>
{
options.AddInMemoryExporter(logRecords);
});
});
var logger = loggerFactory.CreateLogger("TestCategory");
logger.LogInformation("Hello {Name}", "World");
return Verify(logRecords);
}Results in:
[
{
CategoryName: TestCategory,
LogLevel: Information,
Body: Hello {Name},
Attributes: {
{OriginalFormat}: Hello {Name},
Name: World
}
}
]Activities are serialized with the following conventions:
OperationNameis used as the JSON property keyDisplayNameonly included if different fromOperationNameKindonly included if notInternalStatusandStatusDescriptiononly included if notUnsetTags,Events,Links, andBaggageincluded when present- Non-deterministic values (
Id,TraceId,SpanId,ParentSpanId,Duration,StartTimeUtc,Source) are omitted
LogRecords are serialized with the following conventions:
Timestamp,TraceId,SpanIdare omitted (non-deterministic)CategoryName,LogLevel,Body,FormattedMessageincluded when presentEventIdonly included if non-defaultExceptionincluded when presentAttributesincluded when present
Diagnostic from The Noun Project.
