0
0
JUnittesting~20 mins

@EnumSource for enum values in JUnit - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
EnumSource Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of a JUnit test using @EnumSource with all enum values
What will be the output when running this JUnit 5 parameterized test using @EnumSource with all enum values?
JUnit
enum Color { RED, GREEN, BLUE }

@ParameterizedTest
@EnumSource(Color.class)
void testColors(Color color) {
    System.out.println(color);
}
ARED\nGREEN\nBLUE
BRED\nBLUE
CNo output, test does not run
DGREEN\nBLUE
Attempts:
2 left
💡 Hint
The @EnumSource without filters runs the test once for each enum constant.
assertion
intermediate
2:00remaining
Correct assertion for filtered @EnumSource values
Given this enum and test, which assertion correctly verifies the test runs only for the filtered enum values?
JUnit
enum Status { SUCCESS, FAILURE, PENDING }

@ParameterizedTest
@EnumSource(value = Status.class, names = {"SUCCESS", "PENDING"})
void testStatus(Status status) {
    // assertion here
}
AassertTrue(status == Status.SUCCESS || status == Status.FAILURE || status == Status.PENDING);
BassertTrue(status == Status.SUCCESS || status == Status.PENDING);
CassertTrue(status == Status.FAILURE || status == Status.PENDING);
DassertTrue(status == Status.SUCCESS || status == Status.FAILURE);
Attempts:
2 left
💡 Hint
The test runs only for SUCCESS and PENDING, so assertion must check these two.
🔧 Debug
advanced
2:00remaining
Identify the error in @EnumSource usage
What error will occur when running this test code?
JUnit
enum Level { LOW, MEDIUM, HIGH }

@ParameterizedTest
@EnumSource(value = Level.class, names = {"LOW", "CRITICAL"})
void testLevel(Level level) {
    System.out.println(level);
}
ACompilation error due to invalid enum name
BTest runs only with LOW and ignores CRITICAL silently
CNo error, prints LOW and CRITICAL
Djava.lang.IllegalArgumentException: Enum constant CRITICAL not found
Attempts:
2 left
💡 Hint
Check if all names in the names array exist in the enum.
🧠 Conceptual
advanced
2:00remaining
Behavior of @EnumSource with mode EXCLUDE
What is the effect of using @EnumSource with mode = EnumSource.Mode.EXCLUDE and names = {"A", "B"} on an enum with constants A, B, C, D?
JUnit
enum Letter { A, B, C, D }

@ParameterizedTest
@EnumSource(value = Letter.class, mode = EnumSource.Mode.EXCLUDE, names = {"A", "B"})
void testLetter(Letter letter) {
    System.out.println(letter);
}
AThe test runs with all constants A, B, C, D
BThe test runs with A and B only, excluding C and D
CThe test runs with C and D only, excluding A and B
DThe test does not run due to invalid mode
Attempts:
2 left
💡 Hint
Mode.EXCLUDE removes the named constants from the test parameters.
framework
expert
3:00remaining
Combining @EnumSource with custom argument conversion
Which code snippet correctly uses @EnumSource with a custom ArgumentConverter to convert enum values to lowercase strings for the test method parameter?
JUnit
enum Fruit { APPLE, BANANA, CHERRY }

public class LowercaseConverter implements ArgumentConverter {
    @Override
    public Object convert(Object source, ParameterContext context) {
        return ((Fruit) source).name().toLowerCase();
    }
}

@ParameterizedTest
@EnumSource(Fruit.class)
void testFruit(String fruitName) {
    System.out.println(fruitName);
}
A
@ParameterizedTest
@EnumSource(Fruit.class)
void testFruit(@ConvertWith(LowercaseConverter.class) String fruitName) { System.out.println(fruitName); }
B
@ParameterizedTest
@EnumSource(Fruit.class)
@ConvertWith(LowercaseConverter.class)
void testFruit(String fruitName) { System.out.println(fruitName); }
C
@ParameterizedTest
@EnumSource(Fruit.class)
void testFruit(String fruitName) { System.out.println(fruitName.toLowerCase()); }
D
@ParameterizedTest
@EnumSource(value = Fruit.class, mode = EnumSource.Mode.INCLUDE)
void testFruit(@ConvertWith(LowercaseConverter.class) Fruit fruit) { System.out.println(fruit); }
Attempts:
2 left
💡 Hint
The @ConvertWith annotation must be on the parameter, not the method.