What is the main architectural difference between JUnit 4 and JUnit 5?
JUnit 4 is a single monolithic framework, while JUnit 5 is modular with three sub-projects: Jupiter (new programming model), Vintage (to run JUnit 3 and 4 tests), and Platform (test engine).
Click to reveal answer
beginner
How do you write a test method in JUnit 5 compared to JUnit 4?
In JUnit 4, use @Test from org.junit.Test. In JUnit 5, use @Test from org.junit.jupiter.api.Test. JUnit 5 supports more flexible annotations and method signatures.
Click to reveal answer
beginner
Which annotation replaces @Before and @After in JUnit 5?
JUnit 5 replaces @Before with @BeforeEach and @After with @AfterEach for better clarity on when methods run.
Click to reveal answer
intermediate
What new features does JUnit 5 provide that JUnit 4 lacks?
JUnit 5 supports dynamic tests, nested tests, improved assertions, better extension model, and parameterized tests with more options.
Click to reveal answer
intermediate
Can JUnit 5 run JUnit 4 tests?
Yes, JUnit 5 includes the Vintage engine to run JUnit 3 and 4 tests, allowing gradual migration.
Click to reveal answer
Which JUnit version introduced the @BeforeEach annotation?
AJUnit 5
BJUnit 3
CJUnit 4
DJUnit 6
✗ Incorrect
@BeforeEach is a JUnit 5 annotation replacing JUnit 4's @Before.
What is the purpose of the JUnit Vintage engine?
ATo run JUnit 5 tests
BTo run JUnit 3 and 4 tests
CTo run tests in parallel
DTo generate test reports
✗ Incorrect
The Vintage engine allows running older JUnit 3 and 4 tests on the JUnit 5 platform.
Which package contains the JUnit 5 @Test annotation?
Aorg.junit.Test
Borg.junit.platform.Test
Corg.junit4.api.Test
Dorg.junit.jupiter.api.Test
✗ Incorrect
JUnit 5's @Test annotation is in org.junit.jupiter.api package.
Which feature is new in JUnit 5 compared to JUnit 4?
ADynamic tests
BParameterized tests
CTest suites
DAssertions
✗ Incorrect
Dynamic tests are a new feature introduced in JUnit 5.
How does JUnit 5 improve test lifecycle annotations?
ABy using XML configuration
BBy removing them
CBy renaming and adding more specific annotations like @BeforeEach
DBy requiring inheritance
✗ Incorrect
JUnit 5 renames lifecycle annotations for clarity and adds new ones like @BeforeEach and @AfterEach.
Explain the modular architecture of JUnit 5 and how it differs from JUnit 4.
Think about how JUnit 5 separates concerns into different parts.
You got /4 concepts.
Describe the key annotation changes from JUnit 4 to JUnit 5 and their benefits.
Focus on lifecycle and test method annotations.
You got /4 concepts.
Practice
(1/5)
1. Which of the following is a key difference between JUnit 4 and JUnit 5 regarding test method visibility?
easy
A. JUnit 4 requires test methods to be public, but JUnit 5 does not.
B. JUnit 5 requires test methods to be public, but JUnit 4 does not.
C. Both JUnit 4 and JUnit 5 require test methods to be private.
D. Neither JUnit 4 nor JUnit 5 require any specific visibility for test methods.
Solution
Step 1: Understand JUnit 4 test method visibility
JUnit 4 requires test methods to be declared as public for the framework to recognize and run them.
Step 2: Understand JUnit 5 test method visibility
JUnit 5 allows test methods to have any visibility, including package-private, making it more flexible.
Final Answer:
JUnit 4 requires test methods to be public, but JUnit 5 does not. -> Option A
Quick Check:
JUnit 4 public test methods = true [OK]
Hint: Remember: JUnit 4 needs public tests; JUnit 5 is more relaxed [OK]
Common Mistakes:
Thinking JUnit 5 also requires public test methods
Assuming both versions have the same visibility rules
Confusing private and public requirements
2. Which annotation replaces @Before from JUnit 4 in JUnit 5?
easy
A. @Init
B. @BeforeAll
C. @Setup
D. @BeforeEach
Solution
Step 1: Identify JUnit 4 setup annotation
JUnit 4 uses @Before to run code before each test method.
Step 2: Identify JUnit 5 equivalent annotation
JUnit 5 replaces @Before with @BeforeEach to clarify it runs before each test method.
Final Answer:
@BeforeEach -> Option D
Quick Check:
@Before in JUnit 4 = @BeforeEach in JUnit 5 [OK]
Hint: Think "Each" means before every test, replacing @Before [OK]
Common Mistakes:
Choosing @BeforeAll which runs once before all tests
Using non-existent annotations like @Setup or @Init
Confusing @BeforeEach with @AfterEach
3. Consider this JUnit 5 test class snippet:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class CalculatorTest {
@Test
void addTest() {
int result = 2 + 3;
assertEquals(5, result);
}
}
What will be the test result when running this test?
medium
A. Test passes successfully
B. Test fails with assertion error
C. Compilation error due to missing public modifier
D. Runtime error due to missing @BeforeEach
Solution
Step 1: Check method visibility in JUnit 5
The test method is package-private (no modifier), which is allowed in JUnit 5.
Step 2: Verify assertion correctness
The assertion compares 5 and result (2+3=5), so it matches and passes.
Final Answer:
Test passes successfully -> Option A
Quick Check:
2 + 3 = 5, assertion true [OK]
Hint: JUnit 5 allows non-public tests; 2+3=5 means pass [OK]
Common Mistakes:
Assuming test methods must be public in JUnit 5
Thinking missing @BeforeEach causes failure here
Confusing assertion order causing failure
4. Given this JUnit 4 test snippet:
import org.junit.Before;
import org.junit.Test;
public class SampleTest {
@Before
public void setup() {
System.out.println("Setup");
}
@Test
void testMethod() {
System.out.println("Test");
}
}
What is the main issue when running this test?
medium
A. No issues; test runs and prints both lines
B. The test method must be public in JUnit 4
C. The setup method must be static
D. The @Before annotation is not recognized in JUnit 4
Solution
Step 1: Check test method visibility requirement in JUnit 4
JUnit 4 requires test methods to be public, but here testMethod() has default (package-private) visibility.
Step 2: Verify @Before method correctness
The setup() method is public and correctly annotated, so no issue there.
Final Answer:
The test method must be public in JUnit 4 -> Option B
Quick Check:
JUnit 4 test methods must be public [OK]
Hint: JUnit 4 needs public test methods; check method modifiers [OK]
Common Mistakes:
Thinking @Before is invalid in JUnit 4
Assuming setup must be static
Believing test runs despite non-public test method
5. You want to migrate a JUnit 4 test class to JUnit 5. Which of these changes is NOT required?
hard
A. Change import statements to JUnit Jupiter packages
B. Replace @Before with @BeforeEach
C. Make all test methods public
D. Replace @Test import to JUnit Jupiter's @Test
Solution
Step 1: Identify visibility requirements in JUnit 5
JUnit 5 does not require test methods to be public; package-private is allowed.
Step 2: Check other migration steps
Replacing @Before with @BeforeEach and updating imports to Jupiter packages are required for migration.
Final Answer:
Make all test methods public -> Option C
Quick Check:
JUnit 5 relaxes method visibility rules [OK]
Hint: JUnit 5 allows non-public tests; no need to change visibility [OK]
Common Mistakes:
Thinking test methods must be public in JUnit 5
Forgetting to update import statements
Missing @Before to @BeforeEach replacement
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.