[#4970] Change MessageTest unit tests to deterministic implementation #4971
+15
−4
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue: This is the same issue as #4946 involving JSON comparisons. Here it's happening in both the
should_encode_register_typeandshould_encode_unregister_typeunit tests. In summary, since JSONs are unordered, after converting them to strings, the parameter ordering is not guaranteed, which can lead to the tests failing occasionally. For another example of this issue being addressed, see this previous merged PR.These two tests were flagged via the NonDex tool, which detects potentially unreliable tests due to underlying Java API assumptions. To see the Nondex output for the test class
MessageTest, you can run:Fix: The fix here is also similar to the one I detailed in this PR for the other issue: #4947. I use JSONAssert's
assertEquals()method, using non-strict checking (which ignores parameter ordering). This compares the JSON strings without enforcing parameter ordering, which removes the potentially unreliable nature of these tests. This library is already included within the spring-boot dependency, which is already used in the project, so there's no need to update the pom file. Rerunning Nondex shows a passing result.Since
JSONAssert.assertEqualscan throw aJsonException, I wrap the code blocks in a try-catch, then usingAssertions.fail()to fail the unit test if an exception occurs. I'm catching the genericExceptionto handle all possible exceptions, but let me know if I should change this. I'm also using AssertJ for this since the existing assertions in the class use AssertJ, but I can switch to jUnit as well if that's better.PR Checklist:
[SCB-XXX] Fixes bug in ApproximateQuantiles, where you replaceSCB-XXXwith the appropriate JIRA issue.mvn clean install -Pitto make sure basic checks pass. A more thorough check will be performed on your pull request automatically.