This test uses JUnit's @CsvSource to run the same test method multiple times with different inline CSV data. It verifies that the sum of two numbers equals the expected result.
Test Code - JUnit 5
JUnit
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@ParameterizedTest
@CsvSource({
"1, 2, 3",
"4, 5, 9",
"10, 20, 30"
})
void testAddition(int a, int b, int expectedSum) {
int actualSum = a + b;
assertEquals(expectedSum, actualSum, "Sum should match expected value");
}
}
Execution Trace - 3 Steps
Step
Action
System State
Assertion
Result
1
Test starts with first CSV data set (1, 2, 3)
JUnit test runner initializes test method with parameters a=1, b=2, expectedSum=3
assertEquals(3, 1 + 2)
PASS
2
Test runs with second CSV data set (4, 5, 9)
JUnit test runner initializes test method with parameters a=4, b=5, expectedSum=9
assertEquals(9, 4 + 5)
PASS
3
Test runs with third CSV data set (10, 20, 30)
JUnit test runner initializes test method with parameters a=10, b=20, expectedSum=30
assertEquals(30, 10 + 20)
PASS
Failure Scenario
Failing Condition: Expected sum does not match actual sum for any CSV data set
Execution Trace Quiz - 3 Questions
Test your understanding
What does the @CsvSource annotation do in this test?
ARuns the test only once with default values
BProvides multiple sets of input data inline for the test method
CReads CSV data from an external file
DSkips the test if CSV data is missing
Key Result
Using @CsvSource allows running the same test logic with multiple input values easily, improving test coverage and reducing code duplication.
Practice
(1/5)
1.
What is the main purpose of using @CsvSource in JUnit tests?
easy
A. To run the same test multiple times with different input data
B. To connect to a database and fetch test data
C. To generate random test data automatically
D. To create a graphical user interface for tests
Solution
Step 1: Understand the role of @CsvSource
@CsvSource allows specifying multiple sets of input data inline for a single test method.
Step 2: Identify the purpose in testing
This lets the test run repeatedly with each data set, checking behavior for different inputs.
Final Answer:
To run the same test multiple times with different input data -> Option A
Quick Check:
@CsvSource runs tests with multiple inputs [OK]
Hint: Remember: @CsvSource repeats tests with different data [OK]
Common Mistakes:
Thinking @CsvSource connects to databases
Confusing it with random data generation
Assuming it creates UI elements
2.
Which of the following is the correct syntax to use @CsvSource for a test method with two parameters int a and int b?
@ParameterizedTest
@CsvSource({"1, 2", "3, 4"})
void testSum(int a, int b) { ... }
easy
A. @CsvSource({"1; 2", "3; 4"})
B. @CsvSource({"1, 2", "3, 4"})
C. @CsvSource({"1 2", "3 4"})
D. @CsvSource({"1|2", "3|4"})
Solution
Step 1: Check the delimiter used in @CsvSource
The default delimiter for @CsvSource is a comma (,), so values should be separated by commas.
Step 2: Match the syntax with parameters
Since the method expects two int parameters, each CSV line must have two comma-separated values.
Final Answer:
@CsvSource({"1, 2", "3, 4"}) -> Option B
Quick Check:
Comma separates values in @CsvSource [OK]
Hint: Use commas to separate values inside @CsvSource strings [OK]
Common Mistakes:
Using semicolons or spaces instead of commas
Using wrong delimiters like |
Not matching parameter count with CSV values
3.
What will be the output of the following JUnit test when run with @CsvSource?
@ParameterizedTest
@CsvSource({"2, 3, 5", "4, 5, 9", "1, 1, 3"})
void testAdd(int a, int b, int expected) {
assertEquals(expected, a + b);
}
medium
A. All tests fail
B. All tests pass
C. The first test fails
D. The last test fails
Solution
Step 1: Evaluate each test case
Test 1: 2 + 3 = 5 matches expected 5 (pass)
Test 2: 4 + 5 = 9 matches expected 9 (pass)
Test 3: 1 + 1 = 2 does not match expected 3 (fail)
Step 2: Determine overall result
Since one test fails, the test suite reports failure for that case.
Final Answer:
The last test fails -> Option D
Quick Check:
Check sums against expected values [OK]
Hint: Add inputs and compare to expected for each CSV line [OK]
Common Mistakes:
Assuming all tests pass without checking expected values
Ignoring the last test case
Confusing parameter order
4.
Identify the error in this JUnit test using @CsvSource:
C. Missing second value in second CSV line causes error
D. @CsvSource cannot have more than one line
Solution
Step 1: Check CSV lines against method parameters
The method expects two parameters: a String and an int. The first CSV line has two values, but the second line has only one.
Step 2: Understand the impact of missing value
Missing the second value in the second line causes a runtime error because the test cannot map parameters properly.
Final Answer:
Missing second value in second CSV line causes error -> Option C
Quick Check:
Each CSV line must have values matching parameters [OK]
Hint: Count CSV values to match method parameters exactly [OK]
Common Mistakes:
Ignoring missing values in CSV lines
Assuming assertTrue usage causes error
Thinking @CsvSource limits lines to one
5.
You want to test a method isAdult(int age) that returns true if age is 18 or more, false otherwise. Which @CsvSource usage correctly tests ages 17, 18, and 20 with expected results?
hard
A. @CsvSource({"17, false", "18, true", "20, true"})
B. @CsvSource({"17; false", "18; true", "20; true"})
C. @CsvSource({"17 true", "18 true", "20 true"})
D. @CsvSource({"17|false", "18|true", "20|true"})
Solution
Step 1: Use correct delimiter for @CsvSource
The default delimiter is a comma, so values must be comma-separated.
Step 2: Match test data with method parameters
Each line has an int age and a boolean expected result, correctly formatted with commas.
Final Answer:
@CsvSource({"17, false", "18, true", "20, true"}) -> Option A
Quick Check:
Comma-separated values match parameters and expected results [OK]
Hint: Use commas to separate all values in @CsvSource [OK]
Common Mistakes:
Using semicolons or spaces instead of commas
Using wrong delimiters like |
Not matching parameter count or types
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.