Bird
Raised Fist0
JUnittesting~5 mins

Argument conversion in JUnit - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is argument conversion in JUnit?
Argument conversion is the process where JUnit automatically changes the test method's input parameters from strings (like those in @ParameterizedTest) into the required data types before running the test.
Click to reveal answer
intermediate
How does JUnit know how to convert a String argument to a custom object?
JUnit looks for a constructor or a static method in the custom class that takes a single String argument to convert the input string into the object.
Click to reveal answer
intermediate
Which annotation in JUnit 5 allows you to provide a custom argument converter?
You use the @ConvertWith annotation to specify a custom ArgumentConverter class that tells JUnit how to convert the input argument.
Click to reveal answer
beginner
True or False: JUnit can only convert arguments to primitive types automatically.
False. JUnit can convert to many types automatically, including primitives, wrappers, enums, and even custom types if they have the right constructor or static method.
Click to reveal answer
beginner
What happens if JUnit cannot convert a parameter to the required type during a parameterized test?
The test will fail with an error indicating that the argument conversion failed, usually showing a message about no suitable constructor or method found.
Click to reveal answer
In JUnit, which of these is NOT a way JUnit converts a String argument to a parameter type?
AUsing a static method named valueOf or fromString
BUsing the toString() method of the parameter type
CUsing a method annotated with @ConvertWith
DUsing a constructor that takes a String
What annotation do you use to specify a custom argument converter in JUnit?
A@ConvertArgument
B@ArgumentConverter
C@ConvertWith
D@CustomConverter
If you have a parameterized test method with a parameter of type MyClass, how can JUnit convert a String to MyClass automatically?
AEither A or B
BMyClass must have a static method named valueOf(String)
CMyClass must have a constructor that takes a String
DJUnit cannot convert custom classes automatically
What will happen if JUnit fails to convert an argument in a parameterized test?
AJUnit will fail the test with an error
BJUnit will run the test with a null value
CJUnit will convert the argument to a default value
DJUnit will skip the test
Which of these types can JUnit convert automatically without custom converters?
APrimitive types like int, boolean
BEnums
CWrapper classes like Integer, Boolean
DAll of the above
Explain how JUnit converts String arguments to method parameters in parameterized tests.
Think about constructors, static methods, and annotations.
You got /3 concepts.
    Describe what you would do if JUnit cannot convert a String argument to your custom class in a parameterized test.
    Consider custom converters and annotations.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of using @ConvertWith in JUnit parameterized tests?
      easy
      A. To generate random test data automatically
      B. To skip certain test cases during execution
      C. To convert input arguments to the required test method parameter types
      D. To log test execution details

      Solution

      1. Step 1: Understand the role of argument conversion

        Argument conversion changes input data into the type needed by the test method parameters.
      2. Step 2: Identify the purpose of @ConvertWith

        The @ConvertWith annotation tells JUnit which converter class to use to transform the input argument.
      3. Final Answer:

        To convert input arguments to the required test method parameter types -> Option C
      4. Quick Check:

        Argument conversion = convert input arguments [OK]
      Hint: Remember: @ConvertWith changes input type for tests [OK]
      Common Mistakes:
      • Thinking @ConvertWith skips tests
      • Confusing conversion with logging
      • Assuming it generates test data
      2. Which of the following is the correct way to declare a custom argument converter class in JUnit?
      easy
      A. public class MyConverter extends SimpleArgumentConverter { ... }
      B. public class MyConverter implements ConverterInterface { ... }
      C. public class MyConverter extends ConverterBase { ... }
      D. public class MyConverter implements ArgumentConverter { ... }

      Solution

      1. Step 1: Recall JUnit's recommended base class for converters

        JUnit provides SimpleArgumentConverter as a base class to extend for custom converters.
      2. Step 2: Match the correct class declaration

        The correct syntax is to extend SimpleArgumentConverter, not implement interfaces or extend unknown classes.
      3. Final Answer:

        public class MyConverter extends SimpleArgumentConverter { ... } -> Option A
      4. Quick Check:

        Extend SimpleArgumentConverter = correct converter class [OK]
      Hint: Custom converters extend SimpleArgumentConverter class [OK]
      Common Mistakes:
      • Implementing ArgumentConverter interface directly
      • Extending non-existent base classes
      • Using wrong interface names
      3. Given the following code snippet, what will be the output when the test runs?
      @ParameterizedTest
      @ValueSource(strings = {"42"})
      void testWithConversion(@ConvertWith(MyConverter.class) Integer number) {
          System.out.println(number + 8);
      }
      
      public class MyConverter extends SimpleArgumentConverter {
          @Override
          protected Object convert(Object source, Class targetType) {
              return Integer.parseInt(source.toString());
          }
      }
      medium
      A. 50
      B. 42
      C. Compilation error
      D. Runtime exception

      Solution

      1. Step 1: Understand the conversion process

        The string "42" is converted to Integer 42 by MyConverter using Integer.parseInt.
      2. Step 2: Calculate the printed output

        The test method adds 8 to the converted Integer 42, resulting in 50 printed.
      3. Final Answer:

        50 -> Option A
      4. Quick Check:

        42 + 8 = 50 [OK]
      Hint: Convert string to int, then add 8 for output [OK]
      Common Mistakes:
      • Assuming no conversion happens
      • Expecting string concatenation instead of addition
      • Thinking code causes errors
      4. Identify the error in this custom converter code:
      public class MyConverter extends SimpleArgumentConverter {
          @Override
          protected Object convert(Object source, Class targetType) {
              if (targetType != Integer.class) {
                  throw new IllegalArgumentException("Conversion only supports Integer");
              }
              return source;
          }
      }
      medium
      A. The method should return Integer, not Object
      B. The source is returned without converting to Integer
      C. The targetType check should use equals() method
      D. The class should implement ArgumentConverter interface

      Solution

      1. Step 1: Analyze the convert method's return value

        The method returns source directly, which is a String, not converted to Integer.
      2. Step 2: Identify the missing conversion

        It should parse the source string to Integer before returning, e.g., Integer.parseInt(source.toString()).
      3. Final Answer:

        The source is returned without converting to Integer -> Option B
      4. Quick Check:

        Return value must be converted type [OK]
      Hint: Always convert source to target type before returning [OK]
      Common Mistakes:
      • Returning source without conversion
      • Using != instead of equals() for class check (less critical)
      • Confusing return type requirements
      5. You want to write a parameterized test that accepts a CSV string like "John,25,true" and converts it into a custom Person object with fields name (String), age (int), and active (boolean). Which approach correctly uses argument conversion in JUnit?
      hard
      A. Use @ValueSource(strings = {"John,25,true"}) and parse CSV inside the test method manually
      B. Use @CsvSource with three separate parameters and no converter
      C. Create a converter implementing ArgumentProvider and use @ArgumentsSource annotation
      D. Create a converter extending SimpleArgumentConverter that splits the CSV and constructs Person; annotate parameter with @ConvertWith using this converter

      Solution

      1. Step 1: Understand the need for custom conversion

        The input is a single CSV string that must be converted into a Person object before the test runs.
      2. Step 2: Identify the correct use of @ConvertWith

        Creating a converter extending SimpleArgumentConverter that parses the CSV and returns a Person object, then annotating the test parameter with @ConvertWith, is the proper approach.
      3. Final Answer:

        Create a converter extending SimpleArgumentConverter that splits the CSV and constructs Person; annotate parameter with @ConvertWith using this converter -> Option D
      4. Quick Check:

        Custom converter + @ConvertWith = correct approach [OK]
      Hint: Use @ConvertWith with a converter that builds Person from CSV [OK]
      Common Mistakes:
      • Parsing CSV inside test method instead of converter
      • Using wrong annotation like @ArgumentsSource
      • Passing multiple parameters without conversion
      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