Great work, Ashish! Thanks for the JUnit 5 migration and the improved test
reports. Very useful improvements!

Kind Regards,
Chandan Khandelwal
Senior Manager, Enterprise Software Development

*HotWax Systems*
*Enterprise open source experts*
cell: +91-98934-81076
office: 0731-409-3684
http://www.hotwaxsystems.com


On Sat, Aug 8, 2026 at 7:08 PM Ashish Vijaywargiya <
[email protected]> wrote:

> Hello Dev Members,
>
> Sharing a quick update on the JUnit test migration effort:
>
> 1) Retired the legacy Ant-based JUnit Integration Tests report completely;
> Gradle-based reporting is now the only test report generated.
>
> 2) Reskinned Gradle's native unit test HTML report under
> build/reports/tests/test to match the integration test report's theme, so
> both now share a consistent look.
>
> 3) Retitled both reports with JUnit (Jupiter) branding, with an idempotency
> fix so re-running tests keeps titles correct.
>
> Here are the screenshots from Integration Tests and JUnit Tests.
>
>
> https://drive.google.com/file/d/1MtgVh_4f37sqGJh7a6vw5VhuaIJvcBap/view?usp=sharing
>
>
> https://drive.google.com/file/d/1I6oRAD5PhrOYlEN_jk2rEBTerSz77xlb/view?usp=sharing
>
>
> https://drive.google.com/file/d/17OIfNJSSU_BUnyPN9XGC-IHPRShWW28W/view?usp=sharing
>
> Below PR: This has been merged in the OFBiz trunk code base. Please pull
> the code from trunk and see the results on your end.
>
> https://github.com/apache/ofbiz-framework/pull/1605
>
> --
> Kind Regards,
> Ashish Vijaywargiya
> Vice President of Operations
> *HotWax Systems*
> *Enterprise open source experts*
> http://www.hotwaxsystems.com
>
>
>
> On Fri, Aug 7, 2026 at 10:41 PM Divesh Dutta <
> [email protected]>
> wrote:
>
> > Super, the new UI looks cool.
> >
> > Thanks
> > --
> > Divesh Dutta
> > --
> > www.hotwaxsystems.com
> >
> >
> > On Fri, Aug 7, 2026 at 12:53 PM Ashish Vijaywargiya <
> > [email protected]> wrote:
> >
> > > Hello Dev Members,
> > >
> > > I have added a modern new UI for the JUnit Integration Test Results in
> > the
> > > Apache OFBiz project. Hopefully, you will like it as much as I do! 🙂
> > >
> > > Please take a look at the new JUnit Reports UI here:
> > >
> > >
> >
> https://drive.google.com/drive/folders/1Mcg83h07TxpHHluCZ0V0QM9dTtQA_D2a?usp=drive_link
> > >
> > > The Ant-based old JUnit Test Reports will be there as is for some time
> in
> > > the OFBiz project.
> > > I will be deleting the old test reports format in the upcoming days.
> > >
> > > PR: https://github.com/apache/ofbiz-framework/pull/1584
> > >
> > > The following points are covered in this commit/push.
> > >
> > > Add modern JUnit5 test reports (single-page and framed) and fix a
> testdef
> > > suite-name casing mismatch(just following the naming convention in one
> > test
> > > suite name)
> > >
> > > 1. Add a createModernTestReport Gradle task that runs alongside the
> > > existing createTestReports (Ant-style) task
> > >
> > > 2. Parse the JUnit suite XML output into structured data shared by both
> > new
> > > report renderers
> > >
> > > 3. Render a single filterable HTML page summarizing all suites and
> their
> > > test cases
> > >
> > > 4. Extract shared summary/detail rendering and add a URL-safe suite
> slug
> > > for reuse across report pages
> > >
> > > 5. Add a navigable framed report (suite list plus per-suite detail
> pages)
> > > alongside the single-page and Ant reports
> > >
> > > 6. Clear the framed report output directory before each run so stale
> > > suite-*.html pages cannot linger from earlier runs
> > >
> > > 7. Add per-suite summary cards
> > > (tests/failures/errors/skipped/time/timestamp/host) to both new
> reports,
> > > matching the classic report's per-class summary
> > >
> > > 8. Purge stale suite XML before each test run so reports never blend
> > > results from an earlier run with the current one
> > >
> > > 9. Share CSS/JS across the framed report's pages via
> > > junit-report.css/junit-report.js instead of duplicating them on every
> > page
> > >
> > > 10. Escape suite names before writing them into the framed report's
> > > title/heading
> > >
> > > 11. Sort suites by their reported name instead of by filename, and
> guard
> > > the summary totals against an empty suite list
> > >
> > > 12. Lowercase MinilangTests' suite-name/case-name for consistency with
> > the
> > > naming used by the other test suites, and rename the testdef file to
> > match
> > >
> > > 13. Extract the modern/framed test report tasks and their helpers out
> of
> > > build.gradle into test-reports.gradle, applied from build.gradle so it
> > > still runs on every Gradle invocation
> > >
> > > --
> > > Kind Regards,
> > > Ashish Vijaywargiya
> > > Vice President of Operations
> > > *HotWax Systems*
> > > *Enterprise open source experts*
> > > http://www.hotwaxsystems.com
> > >
> > >
> > >
> > > On Mon, Aug 3, 2026 at 12:14 PM Ashish Vijaywargiya <
> > > [email protected]> wrote:
> > >
> > > > Hello Dev Members,
> > > >
> > > > Following up on my July 31 update, I'm glad to report that the JUnit
> 3
> > to
> > > > JUnit 5 (Jupiter) migration for Apache OFBiz Integration tests is now
> > > > complete. Last week I migrated the remaining JUnit3 integration test
> > > files
> > > > in the "applications" and "framework" folders, *which closes out the
> > plan
> > > > I shared then and the broader vision from my original May 2026 thread
> > on
> > > > modernizing our JUnit tooling - *
> > > > https://lists.apache.org/thread/ssh1m7s3qyn3126qm0q7d7n6shrvmcw2*. *
> > > >
> > > > 1) Applications folder is fully migrated (PR #1541): all 62
> > testdef-wired
> > > > JUnit3 test classes across accounting, content, manufacturing,
> > marketing,
> > > > order, party, product, and workeffort converted to Jupiter, using the
> > > > JupiterTestHelper/JunitJupiterTest infrastructure introduced in PR
> > #1529.
> > > >
> > > > 2) Framework folder is fully migrated (PR #1542): all 20
> testdef-wired
> > > > JUnit3 test classes across base, common, entity, minilang, rest-api,
> > > > service, webapp, and widget were converted to Jupiter.
> > > >
> > > > 3) This migration also cleaned up along the way: 27 test files that
> > were
> > > > sitting under src/main instead of src/test got moved to their correct
> > > > location (manufacturing 3, order 5, product 3 in applications; common
> > 1,
> > > > entity 4, minilang 1, rest-api 1, service 8, widget 1 in framework),
> > and
> > > 7
> > > > dead no-op setUp()/tearDown() overrides were removed.
> > > >
> > > > 4) Real value beyond the mechanics: converting applications' tests
> > > > surfaced 8 pre-existing test-order-dependency bugs that JUnit 3's
> > > > nondeterministic method ordering had been silently masking -
> > > > manufacturing/ProductionRunTests, order/QuoteTests, party (3x), and
> > > > product/ProductTest. Each was verified as pre-existing, then fixed.
> > > > Jupiter's deterministic @Order is what made these visible in the
> first
> > > > place.
> > > >
> > > > 5) Combined with the plugins migration (PR #344: assetmaint,
> ecommerce,
> > > > lucene, scrum) and the infrastructure work (PR #1529), every real
> > JUnit3
> > > > integration test file that existed across framework, applications,
> and
> > > > plugins now runs on JUnit5 Jupiter - on top of the JUnit4-to-JUnit6
> > > upgrade
> > > > for standard unit tests completed back in May (PR #1301). Together,
> > this
> > > > brings our full test estate - unit and integration, framework,
> > > > applications, and plugins - onto actively maintained JUnit tooling.
> > > >
> > > > 6) Every migrated suite was verified via scoped and full
> > testIntegration
> > > > runs, all passing with 0 failures/errors. A small follow-up (PR
> #1543)
> > > also
> > > > fixed the noframes test-report output so HTML report generation stays
> > > > consistent.
> > > >
> > > > 7) On my laptop, `./gradlew testIntegration` runs faster on trunk
> > > > (JUnit5-based) than on release24.09 (JUnit3-based): 86.929s vs
> > 113.327s.
> > > > `./gradlew test` shows a similar pattern: 22.638s vs 27.250s. These
> are
> > > > single-machine numbers, not a formal benchmark, but a promising
> signal.
> > > >
> > > > 8) With this, I consider my JUnit modernization work for Apache OFBiz
> > > > complete, covering everything I set out to do in the May 2026 thread:
> > > unit
> > > > tests on JUnit 6, and integration tests across framework,
> applications,
> > > and
> > > > plugins on JUnit 5 (Jupiter).
> > > >
> > > > Thank you, everyone for the feedback and support across my previous
> > > conversations
> > > > - it helped keep this moving.
> > > >
> > > > PRs:
> > > > https://github.com/apache/ofbiz-framework/pull/1529
> > > > https://github.com/apache/ofbiz-framework/pull/1541
> > > > https://github.com/apache/ofbiz-framework/pull/1542
> > > > https://github.com/apache/ofbiz-framework/pull/1543
> > > > https://github.com/apache/ofbiz-plugins/pull/344
> > > >
> > > > As always, happy to help with any JUnit5/Jupiter-related questions or
> > > > issues that come up.
> > > > I will provide quick assistance.
> > > >
> > > > *Note:* I am working on a document for the Apache OFBiz wiki for this
> > > > JUnit 3 to JUnit 5 migration. I will share the document soon.
> > > >
> > > > Thank you!
> > > >
> > > > --
> > > > Kind Regards,
> > > > Ashish Vijaywargiya
> > > > Vice President of Operations
> > > > *HotWax Systems*
> > > > *Enterprise open source experts*
> > > > http://www.hotwaxsystems.com
> > > >
> > > >
> > > >
> > > > On Sun, Aug 2, 2026 at 12:23 PM Ashish Vijaywargiya <
> [email protected]
> > >
> > > > wrote:
> > > >
> > > >> 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/
> > > >> > >
> > > >> >
> > > >>
> > > >>
> > >
> >
>

Reply via email to