If the current JRE does not match, the test is skipped, not failed.
You can combine this with other conditions like @EnabledOnOs for more control.
Summary
@EnabledOnJre runs tests only on specified Java versions.
Use it to avoid running tests on unsupported Java versions.
Tests are skipped if the JRE does not match, keeping your test results clean.
Practice
(1/5)
1. What is the main purpose of the @EnabledOnJre annotation in JUnit?
easy
A. To run a test only on specified Java Runtime Environment versions
B. To disable a test permanently
C. To run a test on all Java versions except specified ones
D. To enable tests only on the latest Java version
Solution
Step 1: Understand the annotation purpose
<code>@EnabledOnJre
Step 2: Match purpose with options
To run a test only on specified Java Runtime Environment versions correctly states it runs tests only on specified JRE versions, while others describe different behaviors.
Final Answer:
To run a test only on specified Java Runtime Environment versions -> Option A
Quick Check:
@EnabledOnJre = run test on chosen JRE versions [OK]
Hint: Think: runs tests only on chosen Java versions [OK]
Common Mistakes:
Confusing @EnabledOnJre with disabling tests
Assuming it runs tests on all versions except specified
Thinking it only enables tests on the latest Java version
2. Which of the following is the correct syntax to enable a test only on Java 17 using @EnabledOnJre?
easy
A. @EnabledOnJre(javaVersion = "17")
B. @EnabledOnJre(version = 17)
C. @EnabledOnJre(JRE.JAVA_17)
D. @EnabledOnJre(value = "JAVA_17")
Solution
Step 1: Recall correct annotation usage
The correct syntax uses the enum constant from JRE, like @EnabledOnJre(JRE.JAVA_17).
Step 2: Compare options
Only @EnabledOnJre(JRE.JAVA_17) uses the correct enum constant syntax. Others use invalid or incorrect attribute names or formats.
Final Answer:
@EnabledOnJre(JRE.JAVA_17) -> Option C
Quick Check:
Use enum JRE.JAVA_17 inside @EnabledOnJre [OK]
Hint: Use enum JRE.JAVA_17 inside parentheses [OK]
Common Mistakes:
Using string values instead of enum constants
Using incorrect attribute names like version or javaVersion
Missing the enum prefix JRE.
3. Given the test annotated with @EnabledOnJre({JRE.JAVA_11, JRE.JAVA_17}), what happens when running on Java 15?
medium
A. The test runs normally
B. The test is skipped
C. The test fails with an error
D. The test runs but logs a warning
Solution
Step 1: Understand the annotation behavior
The test runs only on Java 11 or Java 17 as specified.
Step 2: Check Java 15 behavior
Since Java 15 is not in the list, the test is skipped automatically.
Final Answer:
The test is skipped -> Option B
Quick Check:
Test runs only on specified JREs, else skipped [OK]
Hint: Test runs only on listed JREs; others skip [OK]
Common Mistakes:
Assuming test runs on any Java version
Expecting test to fail instead of skip
Thinking test logs a warning when skipped
4. Identify the error in this test annotation: @EnabledOnJre(JRE.JAVA_8, JRE.JAVA_11)
medium
A. JRE.JAVA_8 is not a valid enum constant
B. The annotation cannot be used with more than one JRE
C. The annotation requires a string, not enum constants
D. Multiple JREs must be inside curly braces {}
Solution
Step 1: Check annotation syntax for multiple JREs
When specifying multiple JREs, they must be enclosed in curly braces as an array.
Step 2: Analyze given annotation
The annotation uses parentheses with multiple enum constants without braces, which is invalid syntax.
Final Answer:
Multiple JREs must be inside curly braces {} -> Option D
Quick Check:
Multiple JREs need braces: {@code @EnabledOnJre({JRE.JAVA_8, JRE.JAVA_11})} [OK]
Hint: Use curly braces for multiple JREs inside @EnabledOnJre [OK]
Common Mistakes:
Omitting curly braces for multiple JREs
Using strings instead of enum constants
Thinking multiple JREs are not allowed
5. You want to write a test that runs only on Java 8, 11, and 17, but skips on all other versions. Which is the correct way to annotate the test?
hard
A. @EnabledOnJre({JRE.JAVA_8, JRE.JAVA_11, JRE.JAVA_17})
B. @EnabledOnJre(JRE.JAVA_8, JRE.JAVA_11, JRE.JAVA_17)
C. @EnabledOnJre(value = {"JAVA_8", "JAVA_11", "JAVA_17"})
D. @EnabledOnJre(versions = {JRE.JAVA_8, JRE.JAVA_11, JRE.JAVA_17})
Solution
Step 1: Recall correct syntax for multiple JREs
Multiple JREs must be passed as an array inside curly braces using enum constants.
Step 2: Evaluate options
@EnabledOnJre({JRE.JAVA_8, JRE.JAVA_11, JRE.JAVA_17}) correctly uses @EnabledOnJre({JRE.JAVA_8, JRE.JAVA_11, JRE.JAVA_17}). @EnabledOnJre(JRE.JAVA_8, JRE.JAVA_11, JRE.JAVA_17) misses braces, C uses strings instead of enums, D uses a wrong attribute name.
Final Answer:
@EnabledOnJre({JRE.JAVA_8, JRE.JAVA_11, JRE.JAVA_17}) -> Option A
Quick Check:
Use enum array with braces for multiple JREs [OK]
Hint: Use enum array with braces for multiple JREs [OK]
Common Mistakes:
Missing curly braces for multiple JREs
Using strings instead of enum constants
Using incorrect attribute names like versions or value
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.