Thank you Arun! 🙏💐 -- Regards, Ashish Vijaywargiya
On Fri, 31 Jul 2026 at 14:47, Arun Patidar <[email protected]> wrote: > Great initiative, Ashish. This is a much-needed improvement for the OFBiz > integration testing ecosystem. > > +1 > > Regards, > Arun Patidar > > > On Fri, Jul 31, 2026 at 11:19 AM Ashish Vijaywargiya < > [email protected]> wrote: > > > Hello Apache OFBiz Dev Members, > > > > I have been working on adding JUnit 5 (Jupiter) support to > > framework/testtools, and using it to migrate every remaining JUnit3 test > > file in the plugins folder. I want to share why this matters and what it > > makes possible, and get the OFBiz community input before I look at the > much > > larger applications folder. > > > > Taken together, this moves Apache OFBiz's Integration Testing capability > > from moderate to genuinely extensive - parameterized tests, explicit > > lifecycle control, deterministic execution ordering, and fail-fast > > diagnostics now run natively against the very same entity and service > > engine our business logic already depends on, directly inside the real > > integration container rather than a mocked-out substitute. > > > > *Why move off JUnit 3* > > > > 1) JUnit 3 test classes are invisible to plain gradlew test today - > > dependencies.gradle registers only the junit-jupiter-engine, with no > > junit-vintage-engine bridge, so a JUnit3 class never appears in a gradlew > > test run as passed, failed, or even skipped; it is simply never > discovered, > > and every one of our ~86 remaining JUnit3 files has been silently relying > > on that gap for years. > > > > 2) JUnit 3 forces every test class to extend > > TestCase/EntityTestCase/OFBizTestCase and discovers tests by reflection > on > > a testXxx naming convention, so there is no real lifecycle, no > > parameterization, and no way to add a test-only helper without adding it > to > > the shared base class. > > > > 3) JUnit 3 has been unmaintained for past many years, while JUnit 5 is > the > > actively developed, industry-standard test framework most contributors > > already know, which lowers the ramp-up cost for anyone new to the OFBiz > > codebase. > > > > 4) Some of our JUnit3 files are not really integration tests at all - a > > scan of all 86 candidate files found four (DateUelTest, MathUelTest, > > MiscUelTest, StringUelTest in framework/base) that never touch the entity > > or service engine, yet still pay the full ofbiz --test container boot > cost > > on every run purely because of the inherited constructor convention; > > migrating those to plain Jupiter tests lets them run in seconds under > > gradlew test instead of minutes under testIntegration, and that migration > > has already been merged. > > > > 5) The migration does not force a rewrite of anything - junit-test-suite > > and jupiter-test-suite test-cases run side by side inside the exact same > > test-suite, sharing the same Delegator/LocalDispatcher and the same > > suite-level rollback, so JUnit3 files keep working exactly as before for > as > > long as we want them to. > > > > *What the new infrastructure gives Integration tests specifically* > > > > 6) JunitJupiterTest is a composed annotation that keeps a > container-backed > > Jupiter test out of plain gradlew test (via a jupiterIntegration tag > > exclusion) while still registering it for testIntegration through a new > > jupiter-test-suite testdef element, so the two Gradle pipelines stay > > cleanly separated. > > > > 7) JupiterTestHelper is a mixin interface that gives getDelegator(), > > getDispatcher(), getUserLogin(), from(), and select() with zero > constructor > > and zero field boilerplate, so a migrated test class becomes a plain POJO > > instead of being forced into the OFBizTestCase inheritance chain. > > > > 8) @Test methods get real, descriptive, free-form names instead of being > > constrained to a testXxx prefix, and @Disabled lets a test be turned off > > with a visible, reported reason instead of being commented out or > silently > > deleted. > > > > 9) @ParameterizedTest with @CsvSource lets one method cover many input > > variations, replacing the copy-pasted testFoo1/testFoo2/testFoo3 style > > still common across the JUnit3 suite. > > > > 10) Method execution order is now explicit and enforced project-wide via > > MethodOrderer.OrderAnnotation, closing a real gap in JUnit 3, which never > > guaranteed any method order at all; converting scrum's test files > surfaced > > a genuine pre-existing bug that depended on JUnit 3's undocumented, > > accidentally-stable reflection order, and @Order made that dependency > > visible and fixable instead of silently masked. > > > > 11) A Jupiter test class with no JunitJupiterTest annotation and no > > JupiterTestHelper needs no OFBiz container at all and runs directly under > > gradlew test, so the same infrastructure now supports both true unit > tests > > and container-backed integration tests cleanly, something the old > > OFBizTestCase-based model could never offer. > > > > 12) Every injection failure mode fails loudly instead of silently - > running > > outside the container, enabling unsupported parallel execution, or > > misnaming a delegator/dispatcher field all throw a clear, specific error > at > > the injection site now, backed by a dedicated JupiterInjectionGuardsTest, > > instead of surfacing later as a confusing null pointer. > > > > *Where things stand and what is next* > > > > 13) The infrastructure itself (JupiterTestExtension, JupiterTestHelper, > > JunitJupiterTest, the jupiter-test-suite testdef element) is implemented, > > hardened, and already proven on real business logic, not just the > > example plugin > > - all four migrated plugins suites (assetmaint, ecommerce, lucene, scrum) > > pass in full under testIntegration. > > > > 14) The plugins folder is now fully migrated - all twelve remaining real > > JUnit3 test files across assetmaint, ecommerce, lucene, and scrum have > been > > converted to Jupiter, with the plugins/example component's original > JUnit3 > > test kept intentionally in place as a side-by-side old-versus-new > > reference. > > > > 15) The applications folder is intentionally not next as a mandatory > sweep > > - there are roughly 86 JUnit3 files and 555 test methods left there, and > > the plan is to keep migration opportunistic, converting a file only when > > there is already a concrete reason to touch it, rather than a mechanical > > bulk PR that would conflict with everyone else's in-flight work. > > > > 16) I plan to let the JUnit5-based Integration tests in plugins soak for > > the next few days before starting on applications, and would welcome > > thoughts from anyone who has opinions on scope, pace, or files worth > > prioritizing first. > > > > PRs: > > https://github.com/apache/ofbiz-framework/pull/1529 > > https://github.com/apache/ofbiz-plugins/pull/344 > > > > I look forward to getting the OFBiz community's support on this JUnit > > 5(Jupiter) migration initiative for integration tests in Apache OFBiz. > > > > Thank you! 👍 > > > > -- > > Kind Regards, > > Ashish Vijaywargiya > > Vice President of Operations > > *HotWax Systems* > > *Enterprise open source experts* > > http://www.hotwaxsystems.com > > https://www.linkedin.com/in/ashishvijaywargiya/ > > >
