Skip to content
Aryeh Citron edited this page May 1, 2026 · 4 revisions

FAQ

Frequently asked questions about TestTrackingDiagrams.


Do I need to change production code?

No — most extensions use DI decoration (DecorateAll<T>), DelegatingHandlers, or DiagnosticSource listeners. Tracking is added entirely in your test project's ConfigureTestServices. A few extensions offer optional one-token changes (e.g. .BuildTracked() for Kafka) but these are no-ops outside test context.


Why is my dependency showing as "Unknown"?

Test identity isn't propagating to the thread running the dependency call. This is common with background threads, change feed processors, and hosted services. See Background Thread Correlation for the resolution chain (HTTP headers → delegate → TestIdentityScope.CurrentGlobalFallback) and how to wire each level.


What's the difference between MessageTracker and TestTrackingMessageHandler?

TestTrackingMessageHandler is a DelegatingHandler for HTTP pipelines — it intercepts HttpClient calls. MessageTracker is for non-HTTP messaging (Service Bus, Kafka, EventHubs, etc.) and provides TrackSendEvent() / TrackConsumeEvent() / TrackSendMessage() methods. See Event & Message Tracking for a detailed comparison.


Why is my diagram empty?

The most common cause is forgetting to enqueue the test context. In your fixture's DisposeAsync():

DiagrammedTestRun.TestContexts.Enqueue(TestContext.Current);

Run with DiagnosticMode = true for a detailed breakdown. See Diagnostics and Debugging.


My diagrams are too wide / have massive token strings

See Filtering and Redacting Diagram Content — My Diagrams Are Too Wide. The quickest fix is RequestResponseLogger.MaxContentLength = 2000; in test setup.


Can I use this without a PlantUML server?

Yes — two options:

  1. Browser-side rendering (default): Uses a self-hosted PlantUML JS library (TeaVM-compiled) that runs entirely in the browser. No server needed. See PlantUML Browser Rendering.
  2. IKVM local rendering: Runs PlantUML in-process via IKVM (Java-to-.NET bridge). No network calls. See Integration PlantUML IKVM.

How does test identity propagation work?

Four-level resolution chain, checked in order:

  1. HTTP request headers (X-Test-Name / X-Test-Id) — propagated by TestTrackingMessageHandler
  2. CurrentTestInfoFetcher delegate — set on options, framework-specific
  3. TestIdentityScope.CurrentAsyncLocal ambient scope (for background threads)
  4. TestIdentityScope.GlobalFallback — static fallback (for pre-existing threads)

See Background Thread Correlation for setup examples.


How do I see what's being tracked at runtime?

Enable diagnostic mode:

new ReportConfigurationOptions { DiagnosticMode = true }

This generates a DiagnosticReport.html alongside your test report showing all registered tracking components, unmatched client names, unknown entries, and HttpContextAccessor status. See Diagnostics and Debugging.


See Also

Home


Demo


Getting Started

Common Tasks

Integration Guides

Extensions

Configuration

Features

Reference

Clone this wiki locally