JVM Frameworks¶
The Stove lifecycle is the same across JVM frameworks: register systems, expose their configuration, start the
application under test, then run assertions through stove { }. The framework starter only changes how the app is
booted.
What changes between starters Runner startup, readiness behavior, DI/test-dependency hooks, and bridge support differ by framework. System modules, the assertion DSL, reporting, tracing, dashboard, and MCP keep the same shape across Spring · Ktor · Micronaut · Quarkus.
The four starters¶
runApplication(...) wrapped in run(args); optional bridge access to the Spring context.
embeddedServer(...) wrapped in run(args); bridge support for Koin or Ktor-DI.
ApplicationContext startup wrapped in run(args); bridge access to Micronaut beans.
How the runner block differs¶
Spring Boot
Micronaut
Everything around the runner stays the same: httpClient, postgresql, kafka, wiremock, tracing, reporting, and test assertions.
Bridge availability¶
| Framework | Bridge | Why |
|---|---|---|
| Spring Boot | ✓ | exposes the running ApplicationContext |
| Ktor | ✓ | exposes the selected Koin or Ktor-DI container |
| Micronaut | ✓ | exposes the running ApplicationContext |
| Quarkus | ✗ | CDI lifecycle integration not yet shipped |
For Quarkus, drive verification through HTTP, DB queries, and Kafka assertions instead of using<T> { ... }.
What stays identical¶
Stove()lifecycle andwith { }registration order- every system module (
stove-postgres,stove-kafka,stove-wiremock, ...) - the test DSL:
stove { http { } postgresql { } kafka { } } - reporting, tracing, dashboard, MCP
- recipes. The same flow swaps starter freely
Where to next¶
-
Wizard scaffolds the runner for you. Open wizard
-
End-to-end scenarios per stack. Recipes
-
Not on the JVM?. Polyglot setups