0
0
JUnittesting~20 mins

Argument conversion in JUnit - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Argument Conversion Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output of JUnit parameterized test with argument conversion
Consider the following JUnit 5 parameterized test using a custom argument converter. What will be the output when the test runs?
JUnit
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.converter.ArgumentConversionException;
import org.junit.jupiter.params.converter.ArgumentConverter;
import org.junit.jupiter.params.converter.ConvertWith;
import static org.junit.jupiter.api.Assertions.*;

class Temperature {
    private final double celsius;
    Temperature(double celsius) { this.celsius = celsius; }
    double getCelsius() { return celsius; }
}

class TemperatureConverter implements ArgumentConverter {
    @Override
    public Object convert(Object source, java.lang.reflect.Parameter context) throws ArgumentConversionException {
        if (source instanceof String s) {
            try {
                double f = Double.parseDouble(s);
                return new Temperature((f - 32) * 5 / 9);
            } catch (NumberFormatException e) {
                throw new ArgumentConversionException("Invalid temperature format");
            }
        }
        throw new ArgumentConversionException("Unsupported source type");
    }
}

public class TempTest {
    @ParameterizedTest
    @org.junit.jupiter.params.provider.ValueSource(strings = {"32", "212", "100"})
    void testFreezingAndBoiling(@ConvertWith(TemperatureConverter.class) Temperature temp) {
        assertTrue(temp.getCelsius() >= 0 && temp.getCelsius() <= 100);
    }
}
ATest fails with NumberFormatException.
BTest fails with AssertionError for input "100".
CTest throws ArgumentConversionException for input "100".
DAll tests pass successfully.
Attempts:
2 left
💡 Hint
Think about the conversion formula and the assertion range.
assertion
intermediate
1:30remaining
Correct assertion for converted argument in JUnit test
Given a JUnit parameterized test that converts a String to an Integer using a custom converter, which assertion correctly verifies the integer is positive?
JUnit
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.converter.ConvertWith;
import static org.junit.jupiter.api.Assertions.*;

class PositiveIntegerConverter implements org.junit.jupiter.params.converter.ArgumentConverter {
    @Override
    public Object convert(Object source, java.lang.reflect.Parameter context) {
        return Integer.parseInt(source.toString());
    }
}

public class NumberTest {
    @ParameterizedTest
    @org.junit.jupiter.params.provider.ValueSource(strings = {"5", "10", "-3"})
    void testPositive(@ConvertWith(PositiveIntegerConverter.class) Integer number) {
        // Which assertion is correct here?
    }
}
AassertTrue(number > 0);
BassertFalse(number <= 0);
CassertEquals(true, number > 0);
DassertNotNull(number);
Attempts:
2 left
💡 Hint
Choose the assertion that directly checks positivity clearly and simply.
🔧 Debug
advanced
2:00remaining
Identify the cause of ArgumentConversionException in JUnit test
This JUnit parameterized test throws ArgumentConversionException at runtime. What is the most likely cause?
JUnit
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.converter.ArgumentConverter;
import org.junit.jupiter.params.converter.ArgumentConversionException;
import org.junit.jupiter.params.converter.ConvertWith;

class BooleanStringConverter implements ArgumentConverter {
    @Override
    public Object convert(Object source, java.lang.reflect.Parameter context) throws ArgumentConversionException {
        if (source instanceof String s) {
            if (s.equalsIgnoreCase("true")) return Boolean.TRUE;
            if (s.equalsIgnoreCase("false")) return Boolean.FALSE;
            throw new ArgumentConversionException("Invalid boolean string");
        }
        throw new ArgumentConversionException("Unsupported source type");
    }
}

public class BoolTest {
    @ParameterizedTest
    @org.junit.jupiter.params.provider.ValueSource(strings = {"true", "false", "yes"})
    void testBoolean(@ConvertWith(BooleanStringConverter.class) Boolean value) {
        assertNotNull(value);
    }
}
AThe converter does not support Boolean type as target.
BThe test method signature is missing @Test annotation.
CThe input "yes" is not handled by the converter, causing ArgumentConversionException.
DThe assertion assertNotNull(value) fails for input "false".
Attempts:
2 left
💡 Hint
Check which input strings the converter accepts.
framework
advanced
1:30remaining
Best practice for argument conversion in JUnit 5 parameterized tests
Which practice is recommended when implementing a custom ArgumentConverter in JUnit 5?
AReturn null silently if conversion input is invalid.
BThrow ArgumentConversionException with a clear message when conversion fails.
CCatch all exceptions and return a default value without notifying the test.
DUse System.exit() to stop tests on conversion failure.
Attempts:
2 left
💡 Hint
Think about how JUnit reports conversion errors.
🧠 Conceptual
expert
2:00remaining
Effect of argument conversion failure on JUnit 5 parameterized test execution
If a custom ArgumentConverter throws ArgumentConversionException for one parameter value in a JUnit 5 parameterized test, what happens to the test execution?
AOnly the test case with the failing parameter is skipped; other parameter values are tested.
BJUnit retries the conversion automatically until it succeeds or times out.
CThe test passes but logs a warning about the conversion failure.
DThe test run fails immediately and no further parameter values are tested.
Attempts:
2 left
💡 Hint
Consider how JUnit handles parameterized test failures per argument.