Skip to content

Migrate to Junit5#2684

Open
8Keep wants to merge 3 commits intojMonkeyEngine:masterfrom
8Keep:junit5-migration
Open

Migrate to Junit5#2684
8Keep wants to merge 3 commits intojMonkeyEngine:masterfrom
8Keep:junit5-migration

Conversation

@8Keep
Copy link
Copy Markdown
Contributor

@8Keep 8Keep commented Apr 7, 2026

We still use junit 4. Trying to migrate to junit 5.

This is a bulky all in one PR.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 7, 2026

🖼️ Screenshot tests have failed.

The purpose of these tests is to ensure that changes introduced in this PR don't break visual features. They are visual unit tests.

📄 Where to find the report:

  • Go to the (failed run) > Summary > Artifacts > screenshot-test-report
  • Download the zip and open jme3-screenshot-tests/build/reports/ScreenshotDiffReport.html

⚠️ If you didn't expect to change anything visual:
Fix your changes so the screenshot tests pass.

If you did mean to change things:
Review the replacement images in jme3-screenshot-tests/build/changed-images to make sure they really are improvements and then replace and commit the replacement images at jme3-screenshot-tests/src/test/resources.

If you are creating entirely new tests:
Find the new images in jme3-screenshot-tests/build/changed-images and commit the new images at jme3-screenshot-tests/src/test/resources.

Note; it is very important that the committed reference images are created on the build pipeline, locally created images are not reliable. Similarly tests will fail locally but you can look at the report to check they are "visually similar".

See https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/jme3-screenshot-tests/README.md for more information

Contact @richardTingle (aka richtea) for guidance if required

Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request migrates the project's test suite from JUnit 4 to JUnit 5 (Jupiter). It updates the Gradle dependencies, including the addition of the JUnit BOM and platform launcher, and refactors numerous test files to use the new JUnit 5 annotations and assertion classes. A critical issue was identified regarding an invalid version for the JUnit BOM in the version catalog.

@8Keep 8Keep marked this pull request as draft April 7, 2026 00:45
@8Keep 8Keep force-pushed the junit5-migration branch from 5f268af to a07d8b9 Compare April 7, 2026 01:59
@8Keep
Copy link
Copy Markdown
Contributor Author

8Keep commented Apr 7, 2026

@richardTingle It looks like the screenshot changes are all minuscule changes, let me know if you disagree.

@8Keep 8Keep marked this pull request as ready for review April 7, 2026 02:03
@riccardobl riccardobl requested a review from Copilot April 7, 2026 08:02
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Migrates the project’s test suite and build configuration from JUnit 4 to JUnit 5 (Jupiter), updating annotations, assertions, and test infrastructure.

Changes:

  • Switched test sources from org.junit.* to org.junit.jupiter.* APIs (including parameterized tests and lifecycle annotations).
  • Replaced JUnit4 runners/rules/expected-exception patterns with Jupiter equivalents (@ExtendWith, @TempDir, assertThrows, etc.).
  • Updated Gradle dependency catalog and test task configuration to run on the JUnit Platform.

Reviewed changes

Copilot reviewed 85 out of 85 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
jme3-terrain/src/test/java/com/jme3/terrain/TestTerrainExporting.java Replace JUnit4 assertions/imports with Jupiter
jme3-terrain/src/test/java/com/jme3/terrain/collision/TerrainCollisionTest.java Convert lifecycle annotations/assertions to Jupiter
jme3-saferallocator/src/test/java/com/jme3/util/SaferAllocMemoryGuardTest.java Convert to Jupiter + use static assertion imports
jme3-plugins/src/test/java/com/jme3/scene/plugins/gltf/GltfLoaderTest.java Convert asserts/throws/fail patterns to Jupiter
jme3-plugins/src/test/java/com/jme3/material/plugin/TestMaterialWrite.java Convert setup annotation + assertions to Jupiter
jme3-plugins/src/test/java/com/jme3/material/plugin/TestMaterialDefWrite.java Convert to Jupiter; adjust null-check assertion usage
jme3-plugins/src/test/java/com/jme3/export/JmeExporterTest.java Migrate Parameterized+TempDir to Jupiter APIs
jme3-plugins/src/test/java/com/jme3/export/InputOutputCapsuleTest.java Convert assertions/fail usage to Jupiter static imports
jme3-jbullet/src/test/java/com/jme3/jbullet/test/PreventBulletIssueRegressions.java Convert assertions/imports to Jupiter
jme3-effects/src/test/java/com/jme3/post/filters/SSAOFilterTest.java Convert assertions/imports to Jupiter
jme3-effects/src/test/java/com/jme3/post/filters/PosterizationFilterTest.java Convert assertions/imports to Jupiter
jme3-effects/src/test/java/com/jme3/post/filters/FXAAFilterTest.java Convert assertions/imports to Jupiter
jme3-effects/src/test/java/com/jme3/post/filters/DepthOfFieldFilterTest.java Convert assertions/imports to Jupiter
jme3-effects/src/test/java/com/jme3/post/filters/CrossHatchFilterTest.java Convert assertions/imports to Jupiter
jme3-effects/src/test/java/com/jme3/post/filters/CartoonEdgeFilterTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/util/TestIssue1919.java Replace expected-exception annotation with assertThrows
jme3-core/src/test/java/com/jme3/util/TestIssue1909.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/util/TempVarsTest.java Convert assertion argument order to Jupiter style
jme3-core/src/test/java/com/jme3/util/StructTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/util/ListSortTest.java Convert @Before to @BeforeEach + Jupiter assertions
jme3-core/src/test/java/com/jme3/util/ListMapTest.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/tools/LodGeneratorTest.java Convert static assertion import to Jupiter
jme3-core/src/test/java/com/jme3/texture/TextureArrayTest.java Convert wildcard static asserts + @Test to Jupiter
jme3-core/src/test/java/com/jme3/texture/TestIssue2250.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/test/PreventCoreIssueRegressions.java Convert assertions/imports to Jupiter static style
jme3-core/src/test/java/com/jme3/shadow/FilterPostProcessingTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/shader/UniformTest.java Convert static assertion imports to Jupiter
jme3-core/src/test/java/com/jme3/shader/GLSLPreprocessorTest.java Convert static assertion imports + @Test to Jupiter
jme3-core/src/test/java/com/jme3/shader/DefineListTest.java Convert static assertion imports + @Test to Jupiter
jme3-core/src/test/java/com/jme3/SetupTest.java Replace expected-exception with assertThrows
jme3-core/src/test/java/com/jme3/scene/threadwarden/SceneGraphThreadWardenTest.java Convert lifecycle + assertions to Jupiter
jme3-core/src/test/java/com/jme3/scene/threadwarden/SceneGraphThreadWardenNodeExtendedTest.java Convert JUnit4 parameterized runner to Jupiter params
jme3-core/src/test/java/com/jme3/scene/threadwarden/SceneGraphThreadWardenGeometryExtendedTest.java Convert JUnit4 parameterized runner to Jupiter params
jme3-core/src/test/java/com/jme3/scene/TestUserData.java Remove TestCase inheritance; use Jupiter assertions
jme3-core/src/test/java/com/jme3/scene/TestIssue954.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/scene/SpatialTest.java Replace expected-exception annotations with assertThrows
jme3-core/src/test/java/com/jme3/scene/ShapeGeometryTest.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/scene/shape/ShapeBoundsTest.java Convert assertions to Jupiter static imports
jme3-core/src/test/java/com/jme3/scene/SceneMatParamOverrideTest.java Convert @Test + static assertions to Jupiter
jme3-core/src/test/java/com/jme3/scene/SceneGraphTraversalTest.java Switch JUnit assertThat import; use Jupiter @Test
jme3-core/src/test/java/com/jme3/scene/plugins/OBJLoaderTest.java Convert @Before to @BeforeEach + Jupiter assertions
jme3-core/src/test/java/com/jme3/scene/PhantomTrianglesTest.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/scene/MPOTestUtils.java Convert static assert import to Jupiter
jme3-core/src/test/java/com/jme3/scene/mesh/VirtualIndexBufferTest.java Replace ExpectedException rule with assertThrows
jme3-core/src/test/java/com/jme3/scene/mesh/MeshTest.java Convert static assert import + @Test to Jupiter
jme3-core/src/test/java/com/jme3/scene/instancing/InstancedNodeTest.java Convert assertions to Jupiter static imports
jme3-core/src/test/java/com/jme3/scene/debug/TestCloneMesh.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/renderer/OpaqueComparatorTest.java Replace expected-exception with assertThrows; Jupiter lifecycle
jme3-core/src/test/java/com/jme3/renderer/Issue2333Test.java Replace expected-exception annotations with assertThrows
jme3-core/src/test/java/com/jme3/math/Vector3fTest.java Replace ExpectedException rule with assertThrows
jme3-core/src/test/java/com/jme3/math/TriangleTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/math/TestTransform.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/math/TestToString.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/math/TestIssue957.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/math/TestIssue2023.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/math/TestIssue1388.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/math/SplineTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/math/QuaternionTest.java Remove TestCase inheritance; use Jupiter @Test
jme3-core/src/test/java/com/jme3/math/FastMathTest.java Replace @Ignore with @Disabled; use assertThrows
jme3-core/src/test/java/com/jme3/math/ColorRGBATest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/material/RenderStateTest.java Convert assertions/imports to Jupiter static style
jme3-core/src/test/java/com/jme3/material/plugins/LoadJ3mdTest.java Replace expected-exception annotations with assertThrows
jme3-core/src/test/java/com/jme3/material/plugins/J3MLoaderTest.java Switch Mockito runner to Jupiter extension
jme3-core/src/test/java/com/jme3/material/MaterialTest.java Replace expected-exception annotations with assertThrows
jme3-core/src/test/java/com/jme3/material/MaterialMatParamTest.java Convert lifecycle + assertions to Jupiter
jme3-core/src/test/java/com/jme3/light/LightSortTest.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/light/LightFilterTest.java Convert @Before to @BeforeEach + Jupiter @Test
jme3-core/src/test/java/com/jme3/effect/influencers/ParticleInfluencerTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/collision/CollideIgnoreTransformTest.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/collision/BoundingCollisionTest.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/cinematic/MotionPathTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/cinematic/CinematicTest.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/bounding/TestBoundingSphere.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/bounding/TestBoundingBox.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/audio/AudioNodeTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/audio/AudioFilterTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/asset/TestLocators.java Convert assertions/imports to Jupiter static style
jme3-core/src/test/java/com/jme3/asset/LoadShaderSourceTest.java Convert @Test import to Jupiter
jme3-core/src/test/java/com/jme3/anim/tween/action/ClipActionTest.java Convert static assertions to Jupiter
jme3-core/src/test/java/com/jme3/anim/JointCloneTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/anim/ArmatureMaskTest.java Convert assertions/imports to Jupiter
jme3-core/src/test/java/com/jme3/anim/AnimComposerTest.java Replace expected-exception with assertThrows; Jupiter asserts
jme3-android-examples/src/test/java/org/jmonkeyengine/jme3androidexamples/ExampleUnitTest.java Convert @Test + static assertions to Jupiter
gradle/libs.versions.toml Replace JUnit4 dep with JUnit5 BOM/Jupiter + add platform launcher + Mockito Jupiter
common.gradle Configure JUnit Platform (useJUnitPlatform) + update test dependencies
Comments suppressed due to low confidence (1)

jme3-plugins/src/test/java/com/jme3/export/JmeExporterTest.java:143

  • testExporterConsistency is parameterized over exporters, but the currentExporter parameter is never used. This causes the whole consistency test (which already iterates over exporters internally) to run redundantly for each exporter value. Either remove parameterization here (use a plain @Test), or refactor the test to use only the provided exporter instance.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@richardTingle
Copy link
Copy Markdown
Member

@richardTingle It looks like the screenshot changes are all minuscule changes, let me know if you disagree.

Looks like there are no changes at all now. So you're all good

@riccardobl riccardobl added the Refactoring and Cleanup This PR is all about improving code quality and javadoc. label Apr 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Refactoring and Cleanup This PR is all about improving code quality and javadoc.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants