Bird
Raised Fist0
JUnittesting~20 mins

@EnabledOnOs for OS-specific tests in JUnit - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
OS-Specific Testing Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the test execution result of this JUnit 5 code snippet?
Consider the following JUnit 5 test method annotated with @EnabledOnOs for Windows OS. What will be the test execution result if run on a Linux machine?
JUnit
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;

public class OSTest {
    @Test
    @EnabledOnOs(OS.WINDOWS)
    void testOnlyOnWindows() {
        System.out.println("Running Windows-specific test");
    }
}
ATest runs and prints "Running Windows-specific test" on Linux.
BTest fails with an exception on Linux.
CTest is skipped and not executed on Linux.
DTest runs but is ignored on Linux.
Attempts:
2 left
💡 Hint
Think about what @EnabledOnOs does when the OS does not match.
❓ assertion
intermediate
1:30remaining
Which assertion correctly verifies the OS name in a JUnit 5 test?
You want to write a test that asserts the current OS is Linux before running OS-specific logic. Which assertion is correct?
JUnit
String osName = System.getProperty("os.name").toLowerCase();
AassertTrue(osName.contains("linux"));
BassertEquals(osName, "Linux");
CassertFalse(osName.equalsIgnoreCase("linux"));
DassertNull(osName);
Attempts:
2 left
💡 Hint
OS name strings can vary in case and format.
🔧 Debug
advanced
2:30remaining
Why does this @EnabledOnOs test run on all OS instead of only Mac?
Examine the code below. The test is intended to run only on Mac OS but runs on Windows and Linux too. Identify the cause.
JUnit
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.EnabledOnOs;
import org.junit.jupiter.api.condition.OS;

public class MacTest {
    @Test
    @EnabledOnOs(os = OS.MAC)
    void testMacOnly() {
        System.out.println("Running Mac test");
    }
}
AThe annotation @EnabledOnOs requires a string parameter, not enum.
BThe OS enum MAC is deprecated and ignored.
CThe test method must be static to run conditionally.
DThe attribute name should be 'value' not 'os' in @EnabledOnOs.
Attempts:
2 left
💡 Hint
Check the correct attribute name for @EnabledOnOs annotation.
❓ framework
advanced
2:00remaining
How to run a test only on Windows and Linux using @EnabledOnOs?
You want a JUnit 5 test to run only on Windows and Linux OS. Which annotation usage is correct?
A@EnabledOnOs(OS.WINDOWS || OS.LINUX)
B@EnabledOnOs({OS.WINDOWS, OS.LINUX})
C@EnabledOnOs(OS.WINDOWS && OS.LINUX)
D@EnabledOnOs(OS.WINDOWS, OS.LINUX)
Attempts:
2 left
💡 Hint
Check how to specify multiple OS values in the annotation array.
🧠 Conceptual
expert
3:00remaining
What happens if @EnabledOnOs is used on a test class with multiple test methods?
If a JUnit 5 test class is annotated with @EnabledOnOs(OS.MAC) and contains multiple test methods, what is the behavior when running on Windows?
AAll test methods in the class are skipped on Windows.
BOnly test methods individually annotated with @EnabledOnOs run on Windows.
CThe test class runs but all test methods fail on Windows.
DThe test class runs and all test methods run regardless of OS.
Attempts:
2 left
💡 Hint
Class-level annotations affect all contained tests.

Practice

(1/5)
1. What is the main purpose of the @EnabledOnOs annotation in JUnit?
easy
A. To specify the Java version for a test
B. To disable a test permanently
C. To run tests in parallel
D. To run a test only on specified operating systems

Solution

  1. Step 1: Understand the role of @EnabledOnOs

    This annotation controls on which operating systems a test should run.
  2. Step 2: Compare with other options

    Options B, C, and D describe different functionalities unrelated to OS-specific test execution.
  3. Final Answer:

    To run a test only on specified operating systems -> Option D
  4. Quick Check:

    @EnabledOnOs = Run test on specific OS [OK]
Hint: Think: runs tests only on chosen OS platforms [OK]
Common Mistakes:
  • Confusing @EnabledOnOs with disabling tests
  • Assuming it controls Java version
  • Thinking it manages test parallelism
2. Which of the following is the correct syntax to enable a test only on Windows OS using @EnabledOnOs?
easy
A. @EnabledOnOs(OS.WINDOWS)
B. @EnabledOnOs(OS.WIN)
C. @EnabledOnOs("Windows")
D. @EnabledOnOs(os = "Windows")

Solution

  1. Step 1: Recall the correct enum usage

    The @EnabledOnOs annotation uses the enum OS with constants like WINDOWS.
  2. Step 2: Check each option's syntax

    @EnabledOnOs(OS.WINDOWS) uses the correct enum constant OS.WINDOWS. Options A, B, and C use invalid syntax or strings instead of enum constants.
  3. Final Answer:

    @EnabledOnOs(OS.WINDOWS) -> Option A
  4. Quick Check:

    Use enum OS.WINDOWS for Windows [OK]
Hint: Use enum OS constants, not strings or wrong names [OK]
Common Mistakes:
  • Using string literals instead of enum constants
  • Using incorrect enum names like OS.WIN
  • Adding parameters incorrectly
3. Given the following test code snippet, what will happen when running on Linux OS?
@Test
@EnabledOnOs(OS.WINDOWS)
void testOnlyOnWindows() {
    System.out.println("Running Windows test");
}
medium
A. The test will run and print "Running Windows test"
B. The test will be skipped and not run
C. The test will fail with an exception
D. The test will run but print nothing

Solution

  1. Step 1: Understand the annotation effect on Linux

    The test is enabled only on Windows OS, so on Linux it should not run.
  2. Step 2: Determine test behavior on unsupported OS

    JUnit skips tests annotated with @EnabledOnOs if the current OS does not match.
  3. Final Answer:

    The test will be skipped and not run -> Option B
  4. Quick Check:

    Test runs only on Windows, skipped on Linux [OK]
Hint: If OS doesn't match, test is skipped automatically [OK]
Common Mistakes:
  • Assuming test runs but prints nothing
  • Expecting a failure or exception
  • Thinking test runs on all OS by default
4. Identify the error in this test code snippet:
@Test
@EnabledOnOs(OS.LINUX, OS.MAC)
void testOnUnix() {
    // test code
}
medium
A. OS.LINUX and OS.MAC are invalid enum constants
B. The annotation should be @DisabledOnOs instead
C. Multiple OS values must be inside an array
D. The method must be static to use @EnabledOnOs

Solution

  1. Step 1: Check annotation parameter format

    The @EnabledOnOs annotation expects an array of OS enums when specifying multiple OSes.
  2. Step 2: Identify correct syntax

    Correct syntax is @EnabledOnOs({OS.LINUX, OS.MAC}). The code misses curly braces for the array. Thus, Multiple OS values must be inside an array correctly identifies that multiple OS values must be inside an array.
  3. Final Answer:

    Multiple OS values must be inside an array -> Option C
  4. Quick Check:

    Use curly braces for multiple OS enums [OK]
Hint: Use curly braces {} for multiple OS enums [OK]
Common Mistakes:
  • Omitting curly braces for multiple OS values
  • Confusing @EnabledOnOs with @DisabledOnOs
  • Thinking method must be static
5. You want a test to run only on Windows and Mac OS but skip on Linux. Which is the correct way to write the @EnabledOnOs annotation for this requirement?
hard
A. @EnabledOnOs({OS.WINDOWS, OS.MAC})
B. @EnabledOnOs(OS.WINDOWS, OS.MAC, OS.LINUX)
C. @EnabledOnOs(OS.WINDOWS) @EnabledOnOs(OS.MAC)
D. @EnabledOnOs(OS.WINDOWS & OS.MAC)

Solution

  1. Step 1: Understand how to specify multiple OSes

    Multiple OSes must be provided as an array inside curly braces in @EnabledOnOs.
  2. Step 2: Evaluate each option

    @EnabledOnOs({OS.WINDOWS, OS.MAC}) correctly uses an array with OS.WINDOWS and OS.MAC. @EnabledOnOs(OS.WINDOWS, OS.MAC, OS.LINUX) includes Linux, which should be excluded. @EnabledOnOs(OS.WINDOWS) @EnabledOnOs(OS.MAC) uses multiple annotations, which is invalid. @EnabledOnOs(OS.WINDOWS & OS.MAC) uses an invalid bitwise operator.
  3. Final Answer:

    @EnabledOnOs({OS.WINDOWS, OS.MAC}) -> Option A
  4. Quick Check:

    Use array with OS enums to include multiple OSes [OK]
Hint: Use curly braces with OS enums for multiple OSes [OK]
Common Mistakes:
  • Including unwanted OS like Linux
  • Using multiple @EnabledOnOs annotations
  • Using invalid operators like &
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard