Introduction
Paramixel builds tests from execution trees. A test declares a tree of Action instances built through Builder subtypes or static factories. The Runner resolves the tree, executes it, and returns a Result with a descriptor tree and aggregate status.
The result tree mirrors the action tree, so the same structure appears in code, execution, reports, and programmatic inspection.
Core model
- An
Actionis an immutable execution unit with adisplayName(). - A
Builderis a mutable builder that produces an immutableActionviabuild(). - A
Descriptorrepresents one execution occurrence of an action. - A
Statusis one ofPENDING,RUNNING,PASSED,FAILED,SKIPPED, orABORTED. - Discovery finds public static factory methods annotated with
@Paramixel.Factory.
When to use Paramixel
Use Paramixel when a test benefits from explicit composition: setup/body/teardown lifecycles, parallel branches, fixture-scoped steps, tag-based selection, and reports that mirror the execution tree.
How Paramixel complements JUnit
Paramixel is not a replacement for JUnit. They can coexist in the same codebase and build: keep ordinary unit tests and method-level parameterized tests in JUnit, and use Paramixel for tree-shaped tests whose structure matters.
In short:
- JUnit parameterized tests parameterize test invocations.
- Paramixel composes and schedules execution trees.
That distinction matters when a test needs global setup/teardown, nested sequential and parallel branches, generated environments, per-branch lifecycle, retries, timeouts, isolation, and structural reports.
Configuration model
Paramixel uses property-based configuration. Put defaults in paramixel.properties, pass JVM system properties with -D, or construct programmatic Configuration objects for custom runners.