Reporting¶
Every Stove test failure ships with structured execution context. The reporter captures activity from registered systems: HTTP calls, DB ops, Kafka observations, WireMock stubs, and gRPC interactions. When an assertion fails, you get the stack trace plus the sequence of system activity that led to it.
In 30 seconds
Add the Kotest or JUnit extension. Failures print a timeline by default (pretty console). Add reporting { } in Stove().with to tune output or use machine-readable JSON. Reporting pairs with Tracing and the Dashboard; it does not require either one.
Setup¶
The extension registers an AfterTestListener that intercepts failures and prints the report.
Configure¶
Default is on, prints to console, dumps only on failure. Override inside Stove().with { }:
Stove().with {
reporting {
ReportingOptions(
enabled = true,
dumpOnFailure = true, // false = dump every test
failureRenderer = PrettyConsoleRenderer(), // or JsonReportRenderer()
)
}
// ... your systems
}.run()
Renderers¶
PrettyConsoleRenderer (default)
Human-friendly. Color, alignment, system snapshots inline. Built with Mordant.
JsonReportRenderer
Machine-readable. Pipe into CI artifacts, MCP, or your own analyzer.
What gets reported¶
| Surface | Captured |
|---|---|
| HTTP | method, path, status, latency, request/response bodies (truncated) |
| Kafka | producer publishes, consumer reads, topic, partition, offset, payload (truncated) |
| Databases (SQL + NoSQL) | queries, bind args, rows affected, durations |
| WireMock | stub matches and misses, request body |
| gRPC | method, request, response, status |
| System snapshots | per-system state at failure time (Kafka topics, WireMock unmatched, etc.) |
Snapshots make root-cause analysis faster. A WireMock snapshot, for example, can show that an "unexpected 404" was the app hitting an unmocked path.
Pairs well with¶
-
Tracing. Reporter plus OTel = call chain inside your app, not just the test view.
-
Dashboard. Same data, browseable in a local web UI; persists across sessions.
-
MCP. Agents fetch the same evidence in token-efficient slices.
-
When a test fails. The full failure flow as a scroll story.
Troubleshooting¶
| Symptom | Check |
|---|---|
| No report on failure | Extension registered? StoveKotestExtension() in extensions (Kotest) or @ExtendWith(StoveJUnitExtension::class) (JUnit) |
| Report missing system entries | System registered before the runner block in Stove().with { } |
| Empty Kafka snapshot | Interceptor bean registered? See Kafka pitfalls |
| JSON empty in CI | Use JsonReportRenderer(); pipe System.out to a file or use dashboard JSON export |