Challenge - 5 Problems
CsvSource Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of a JUnit test using @CsvSource with multiple parameters
What is the output of the following JUnit test method when run?
Note: The test asserts that the sum of two integers equals the expected result.
Note: The test asserts that the sum of two integers equals the expected result.
JUnit
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; public class CalculatorTest { @ParameterizedTest @CsvSource({"1, 2, 3", "4, 5, 9", "3, 3, 6"}) void testAdd(int a, int b, int expected) { assertEquals(expected, a + b); } }
Attempts:
2 left
💡 Hint
Check the addition results for each input set.
✗ Incorrect
Each pair of integers is added and compared to the expected sum. All sums match the expected values, so all tests pass.
❓ assertion
intermediate2:00remaining
Identify the failing assertion in a @CsvSource test
Given the following test method, which assertion will fail during execution?
JUnit
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; public class StringTest { @ParameterizedTest @CsvSource({"hello, HELLO", "world, WORLD", "java, Java"}) void testToUpperCase(String input, String expected) { assertEquals(expected, input.toUpperCase()); } }
Attempts:
2 left
💡 Hint
Check how the expected string compares to the actual uppercase conversion.
✗ Incorrect
For 'java', expected is 'Java' but input.toUpperCase() returns 'JAVA', so the assertion fails.
❓ locator
advanced2:00remaining
Best practice for specifying string values with commas in @CsvSource
Which option correctly specifies a string containing a comma in a @CsvSource annotation?
Attempts:
2 left
💡 Hint
Look for the correct way to escape or quote commas inside CSV strings.
✗ Incorrect
In @CsvSource, strings containing commas must be enclosed in single quotes to be treated as one value.
🔧 Debug
advanced2:00remaining
Identify the cause of a runtime error in a @CsvSource test
Why does the following test method throw an exception during execution?
JUnit
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; public class DivisionTest { @ParameterizedTest @CsvSource({"10, 2, 5", "8, 0, 0"}) void testDivide(int numerator, int denominator, int expected) { assertEquals(expected, numerator / denominator); } }
Attempts:
2 left
💡 Hint
Consider what happens when denominator is zero in division.
✗ Incorrect
Dividing by zero causes an ArithmeticException at runtime, which stops the test execution.
❓ framework
expert3:00remaining
Understanding parameter conversion in @CsvSource with custom types
Given the following test and supporting code, what will be the result of running the test?
JUnit
import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.converter.ConvertWith; import org.junit.jupiter.params.converter.SimpleArgumentConverter; class Color { String name; Color(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Color)) return false; return name.equals(((Color) o).name); } } class ColorConverter extends SimpleArgumentConverter { @Override protected Object convert(Object source, Class<?> targetType) { if (source instanceof String && targetType == Color.class) { return new Color(((String) source).toLowerCase()); } else { throw new IllegalArgumentException("Conversion failed"); } } } public class ColorTest { @ParameterizedTest @CsvSource({"RED, red", "Blue, blue", "Green, green"}) void testColorConversion(@ConvertWith(ColorConverter.class) Color input, Color expected) { assertEquals(expected, input); } }
Attempts:
2 left
💡 Hint
Consider how JUnit converts parameters and which parameters have converters applied.
✗ Incorrect
Only the 'input' parameter is converted using ColorConverter. The 'expected' parameter remains a String, so the assertion compares Color to String causing failure or exception.