0
0
JUnittesting~20 mins

@NullSource and @EmptySource in JUnit - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
JUnit Null and Empty Source Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
🧠 Conceptual
intermediate
1:30remaining
Purpose of @NullSource in JUnit 5
What is the main purpose of using the @NullSource annotation in JUnit 5 parameterized tests?
ATo provide a single null argument to the test method to check how it handles null inputs.
BTo provide an empty string as input to the test method.
CTo provide multiple null values to the test method.
DTo skip the test if the input is null.
Attempts:
2 left
💡 Hint
Think about testing how your code behaves when it receives no object.
🧠 Conceptual
intermediate
1:30remaining
Effect of @EmptySource in JUnit 5
Which of the following inputs does the @EmptySource annotation provide to a parameterized test method?
AOnly an empty string regardless of parameter type.
BA null value only.
CRandom non-empty values.
DEmpty values such as empty string, empty collection, or empty array depending on the parameter type.
Attempts:
2 left
💡 Hint
Consider what 'empty' means for different data types.
Predict Output
advanced
2:00remaining
Output of Parameterized Test with @NullSource and @EmptySource
Consider this JUnit 5 parameterized test method. What will be the total number of test invocations executed?
JUnit
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.EmptySource;

class SampleTest {
    @ParameterizedTest
    @NullSource
    @EmptySource
    void testWithNullAndEmpty(String input) {
        System.out.println("Input: '" + input + "'");
    }
}
A2 test invocations: one with null and one with empty string.
B1 test invocation: only with null input.
C3 test invocations: null, empty string, and one default value.
D4 test invocations: null, empty string, empty array, and empty collection.
Attempts:
2 left
💡 Hint
Count how many inputs @NullSource and @EmptySource provide for a String parameter.
assertion
advanced
1:30remaining
Assertion Behavior with @NullSource and @EmptySource
Given a parameterized test using @NullSource and @EmptySource on a String parameter, which assertion correctly verifies that the input is either null or empty?
JUnit
import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.EmptySource;

class AssertionTest {
    @ParameterizedTest
    @NullSource
    @EmptySource
    void testInput(String input) {
        // Which assertion is correct here?
    }
}
AassertEquals("", input);
BassertTrue(input == null || input.isEmpty());
CassertNotNull(input);
DassertFalse(input.isEmpty());
Attempts:
2 left
💡 Hint
Remember that input can be null or empty string.
🔧 Debug
expert
2:00remaining
Debugging a Failing Parameterized Test with @NullSource and @EmptySource
A parameterized test uses @NullSource and @EmptySource on a method with a non-nullable primitive int parameter. What error will occur when running the test?
JUnit
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.NullSource;
import org.junit.jupiter.params.provider.EmptySource;

class DebugTest {
    @ParameterizedTest
    @NullSource
    @EmptySource
    void testPrimitive(int number) {
        System.out.println(number);
    }
}
ATest runs successfully with 0 as default value for null input.
BTest fails with NumberFormatException due to empty input.
CTest fails with a ParameterResolutionException because null cannot be assigned to primitive int.
DTest runs only once with empty input converted to 0.
Attempts:
2 left
💡 Hint
Consider how Java primitives handle null values.