Bird
Raised Fist0
JUnittesting~5 mins

@ValueSource for simple values in JUnit - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the @ValueSource annotation in JUnit?

@ValueSource is used to provide a set of simple values to a parameterized test method. It helps run the same test multiple times with different inputs.

Click to reveal answer
beginner
Which types of simple values can @ValueSource provide in JUnit?

@ValueSource supports primitive types like int, long, double, short, byte, char, boolean, and also String arrays.

Click to reveal answer
beginner
How do you write a parameterized test method using @ValueSource for integers 1, 2, and 3?
  @ParameterizedTest
  @ValueSource(ints = {1, 2, 3})
  void testWithInts(int number) {
    // test code using 'number'
  }
Click to reveal answer
intermediate
What happens if you pass an unsupported type to @ValueSource?

JUnit will fail to run the test and throw an error because @ValueSource only supports specific simple types. You must use supported types only.

Click to reveal answer
intermediate
Can @ValueSource be combined with other sources like @CsvSource in JUnit?

No, @ValueSource cannot be combined with other sources on the same test method. Use only one source annotation per parameterized test method.

Click to reveal answer
Which of these is a valid use of @ValueSource in JUnit?
A@ValueSource(strings = {"apple", "banana"})
B@ValueSource(objects = {new Object(), new Object()})
C@ValueSource(lists = {{1,2}, {3,4}})
D@ValueSource(dates = {"2023-01-01"})
What annotation must be used together with @ValueSource to run parameterized tests?
A@ParameterizedTest
B@Test
C@BeforeEach
D@RepeatedTest
Which of these types is NOT supported by @ValueSource?
Aint
BString
Cboolean
DList<String>
How many source annotations can you use on a single parameterized test method?
AThree
BTwo
COne
DUnlimited
What will happen if you pass unsupported types to @ValueSource?
ATest runs normally
BJUnit throws an error
CValues are ignored
DTest is skipped
Explain how to use @ValueSource to run a test multiple times with different simple values.
Think about how to feed different inputs to the same test method.
You got /4 concepts.
    List the simple value types supported by @ValueSource in JUnit.
    Focus on primitive types and strings.
    You got /2 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using @ValueSource in JUnit tests?
      easy
      A. To run the same test multiple times with different simple input values
      B. To create a new test class automatically
      C. To skip tests based on conditions
      D. To generate random test data during runtime

      Solution

      1. Step 1: Understand the role of @ValueSource

        @ValueSource provides a list of simple values to run a test repeatedly with each value.
      2. Step 2: Compare options with this role

        Only To run the same test multiple times with different simple input values correctly describes running the same test multiple times with different inputs.
      3. Final Answer:

        To run the same test multiple times with different simple input values -> Option A
      4. Quick Check:

        @ValueSource = run test multiple times [OK]
      Hint: Remember: @ValueSource repeats tests with simple inputs [OK]
      Common Mistakes:
      • Thinking @ValueSource creates new test classes
      • Confusing @ValueSource with conditional test skipping
      • Assuming it generates random data
      2. Which of the following is the correct syntax to use @ValueSource with integers in JUnit 5?
      easy
      A. @ValueSource(numbers = {1, 2, 3})
      B. @ValueSource(values = {1, 2, 3})
      C. @ValueSource(int = {1, 2, 3})
      D. @ValueSource(ints = {1, 2, 3})

      Solution

      1. Step 1: Recall correct attribute name for integers

        The attribute for integer arrays in @ValueSource is ints.
      2. Step 2: Check syntax correctness

        @ValueSource(ints = {1, 2, 3}) uses @ValueSource(ints = {1, 2, 3}), which is the correct syntax.
      3. Final Answer:

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

        ints attribute = correct syntax [OK]
      Hint: Use 'ints' attribute for integer arrays in @ValueSource [OK]
      Common Mistakes:
      • Using wrong attribute names like 'values' or 'numbers'
      • Missing 's' in 'ints'
      • Using singular 'int' instead of 'ints'
      3. Given the following test method, what will be the output when run?
      @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 from @ValueSource

        The strings are "apple" (length 5) and "banana" (length 6).
      2. Step 2: Understand test execution

        The test runs twice, printing the length of each string in order: 5 then 6.
      3. Final Answer:

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

        "apple"=5, "banana"=6 [OK]
      Hint: Check string lengths in order given by @ValueSource [OK]
      Common Mistakes:
      • Mixing order of outputs
      • Assuming only one run instead of multiple
      • Forgetting @ParameterizedTest annotation
      4. Identify the error in this JUnit 5 test using @ValueSource:
      @ParameterizedTest
      @ValueSource(strings = {"test", null})
      void testNotNull(String input) {
          assertNotNull(input);
      }
      medium
      A. Missing @Test annotation
      B. assertNotNull is not a valid assertion
      C. Using null in @ValueSource causes a runtime error
      D. Strings array must not contain more than one value

      Solution

      1. Step 1: Check @ValueSource limitations

        @ValueSource does not support null values; including null causes errors.
      2. Step 2: Verify other parts

        assertNotNull is valid, @ParameterizedTest is present, and multiple strings are allowed.
      3. Final Answer:

        Using null in @ValueSource causes a runtime error -> Option C
      4. Quick Check:

        null not allowed in @ValueSource [OK]
      Hint: Never put null in @ValueSource arrays [OK]
      Common Mistakes:
      • Thinking null is allowed in @ValueSource
      • Confusing @ParameterizedTest with @Test
      • Believing assertNotNull is invalid
      5. How can you use @ValueSource to test a method that accepts both int and long values?
      hard
      A. Use @ValueSource with ints only and cast to long inside the test
      B. Use two separate test methods each with @ValueSource for ints and longs
      C. Use @ValueSource with longs only and cast to int inside the test
      D. Use @ValueSource with mixed int and long arrays in one method

      Solution

      1. Step 1: Understand @ValueSource type restrictions

        @ValueSource attributes accept only one primitive type array per annotation (ints or longs, not mixed).
      2. Step 2: Choose approach to test both types

        To test both int and long inputs, create two test methods each with its own @ValueSource for the correct type.
      3. Final Answer:

        Use two separate test methods each with @ValueSource for ints and longs -> Option B
      4. Quick Check:

        Separate methods for int and long [OK]
      Hint: Use separate tests for different primitive types [OK]
      Common Mistakes:
      • Trying to mix int and long in one @ValueSource
      • Casting inside test instead of separate methods
      • Assuming @ValueSource supports mixed types
      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