Bird
Raised Fist0
JUnittesting~10 mins

@ParameterizedTest annotation in JUnit - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to import the annotation for parameterized tests.

JUnit
import org.junit.jupiter.api.[1];
Drag options to blanks, or click blank then click option'
ATest
BParameterizedTest
CBeforeEach
DAfterAll
Attempts:
3 left
💡 Hint
Common Mistakes
Importing @Test instead of @ParameterizedTest
Using annotations from JUnit 4
Forgetting to import the annotation
2fill in blank
medium

Complete the code to supply string values for the parameterized test.

JUnit
@ParameterizedTest
@ValueSource(strings = {"apple", "banana", "cherry"})
void testFruits([1] fruit) {
    System.out.println(fruit);
}
Drag options to blanks, or click blank then click option'
AString
Bint
Cdouble
Dboolean
Attempts:
3 left
💡 Hint
Common Mistakes
Using int or other types instead of String
Forgetting to match parameter type with @ValueSource type
3fill in blank
hard

Fix the error in the parameterized test method signature.

JUnit
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void testNumbers([1] number) {
    assertTrue(number > 0);
}
Drag options to blanks, or click blank then click option'
AInteger
BString
Cint
Ddouble
Attempts:
3 left
💡 Hint
Common Mistakes
Using String instead of int
Using wrapper Integer instead of primitive int
4fill in blank
hard

Fill both blanks to create a parameterized test that checks if numbers are even.

JUnit
@ParameterizedTest
@ValueSource([1] = {2, 4, 6, 8})
void testEvenNumbers([2] number) {
    assertEquals(0, number % 2);
}
Drag options to blanks, or click blank then click option'
Aints
BString
Cint
Dstrings
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'strings' or 'String' for integer values
Mismatch between annotation and parameter types
5fill in blank
hard

Fill all three blanks to create a parameterized test using @CsvSource with two parameters.

JUnit
@ParameterizedTest
@CsvSource({"apple, 1", "banana, 2", "cherry, 3"})
void testFruitCount([1] fruit, [2] count) {
    assertNotNull(fruit);
    assertTrue(count > [3]);
}
Drag options to blanks, or click blank then click option'
AString
Bint
C0
Ddouble
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong parameter types
Incorrect comparison value in assertion

Practice

(1/5)
1. What is the main purpose of the @ParameterizedTest annotation in JUnit?
easy
A. To group multiple test classes together
B. To skip a test method during execution
C. To mark a test method as the only one to run
D. To run the same test multiple times with different inputs

Solution

  1. Step 1: Understand the role of @ParameterizedTest

    The annotation allows running one test method repeatedly with different input values.
  2. Step 2: Compare with other options

    Skipping tests or grouping classes are done by other annotations, not @ParameterizedTest.
  3. Final Answer:

    To run the same test multiple times with different inputs -> Option D
  4. Quick Check:

    @ParameterizedTest = run test with many inputs [OK]
Hint: Think: same test, many inputs, no code repetition [OK]
Common Mistakes:
  • Confusing @ParameterizedTest with @Test
  • Thinking it skips tests
  • Assuming it groups test classes
2. Which of the following is the correct way to provide integer values to a @ParameterizedTest using @ValueSource?
easy
A. @ValueSource(ints = {1, 2, 3})
B. @ValueSource(values = {1, 2, 3})
C. @ValueSource(strings = {1, 2, 3})
D. @ValueSource(numbers = {1, 2, 3})

Solution

  1. Step 1: Recall @ValueSource syntax

    For integers, the correct attribute is 'ints', so @ValueSource(ints = {...}) is correct.
  2. Step 2: Check other options

    'values', 'strings', and 'numbers' are invalid attributes for @ValueSource with integers.
  3. Final Answer:

    @ValueSource(ints = {1, 2, 3}) -> Option A
  4. Quick Check:

    Use 'ints' for integer arrays in @ValueSource [OK]
Hint: Use 'ints' attribute for integer arrays in @ValueSource [OK]
Common Mistakes:
  • Using 'values' instead of 'ints'
  • Using 'strings' for numbers
  • Using unsupported attribute names
3. Given the following test method, what will be the output when running the parameterized test?
@ParameterizedTest
@ValueSource(strings = {"apple", "banana"})
void testLength(String fruit) {
    System.out.println(fruit.length());
}
medium
A. 5 and 6 printed on separate lines
B. 6 and 5 printed on separate lines
C. Only 5 printed once
D. Compilation error due to missing annotation

Solution

  1. Step 1: Identify input values

    The test runs twice with inputs "apple" and "banana".
  2. Step 2: Calculate string lengths

    "apple" length is 5, "banana" length is 6, so output prints 5 then 6 on separate lines.
  3. Final Answer:

    5 and 6 printed on separate lines -> Option A
  4. Quick Check:

    String lengths = 5, 6 [OK]
Hint: Check each input's length printed separately [OK]
Common Mistakes:
  • Mixing order of outputs
  • Expecting only one print
  • Assuming compilation error
4. Identify the error in the following parameterized test code:
@ParameterizedTest
@ValueSource(ints = {1, 2, 3})
void testIsPositive(String number) {
    assertTrue(Integer.parseInt(number) > 0);
}
medium
A. Missing @Test annotation
B. Method parameter type should be int, not String
C. ValueSource should use strings instead of ints
D. assertTrue cannot be used in parameterized tests

Solution

  1. Step 1: Check parameter type vs ValueSource

    @ValueSource provides ints, but method parameter is String, causing type mismatch.
  2. Step 2: Correct parameter type

    Change method parameter to int to match input type and avoid parsing.
  3. Final Answer:

    Method parameter type should be int, not String -> Option B
  4. Quick Check:

    Parameter type must match @ValueSource type [OK]
Hint: Match method parameter type with @ValueSource data type [OK]
Common Mistakes:
  • Using wrong parameter type
  • Forgetting @ParameterizedTest annotation
  • Misusing assertTrue in parameterized tests
5. You want to test a method that checks if a number is even using @ParameterizedTest with multiple inputs including 0, -2, and 3. Which of the following test method signatures and annotations correctly achieve this?
hard
A. @ParameterizedTest @ValueSource(ints = {0, -2, 3}) void testIsEven(int number) { assertEquals(number % 2, 0); }
B. @ParameterizedTest @ValueSource(ints = {0, -2, 3}) void testIsEven(int number) { assertEquals(0, number % 2); }
C. @ParameterizedTest @CsvSource({"0, true", "-2, true", "3, false"}) void testIsEven(int number, boolean expected) { assertEquals(expected, number % 2 == 0); }
D. @ParameterizedTest @CsvSource({"0, true", "-2, true", "3, false"}) void testIsEven(String number, boolean expected) { assertEquals(expected, Integer.parseInt(number) % 2 == 0); }

Solution

  1. Step 1: Understand input and expected output

    We want to test numbers with expected boolean results, so two parameters are needed.
  2. Step 2: Check annotation and method signature

    @CsvSource allows multiple parameters; method parameters match types (int, boolean) and assertion compares expected with actual.
  3. Step 3: Analyze other options

    Options A and B have incorrect assertEquals argument order or logic; D uses String parameter unnecessarily.
  4. Final Answer:

    Option C correctly uses @CsvSource with matching parameters and assertion -> Option C
  5. Quick Check:

    Use @CsvSource for multiple inputs and expected results [OK]
Hint: Use @CsvSource for inputs plus expected results [OK]
Common Mistakes:
  • Using wrong assertEquals argument order
  • Mismatching parameter types
  • Using @ValueSource when multiple parameters needed
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