Migration from @RunWith(JUnitPlatform.class) to @ExtendWith in JUnit 5

How do I migrate from @RunWith(JUnitPlatform.class) to JUnit 5?

In my project, I’m doing some cleanup and migrating everything to JUnit 5. Previously, I was using @RunWith(JUnitPlatform.class). Now, I want to migrate it to the @ExtendWith annotation. Is there an equivalent for JUnitPlatform.class in JUnit 5 that I can use with @ExtendWith?

Hey, I’ve been working with JUnit for quite some time, so here’s what I’d suggest:
In JUnit 5, the approach has shifted slightly. Instead of @RunWith(JUnitPlatform.class), you can use annotations like @SelectPackages and @SelectClasses to define test suites. This is how it could look:

@RunWith(JUnitPlatform.class) // JUnit 4 syntax  
@SelectPackages("com.example.tests")  
public class MyTestSuite {  
}  

This approach eliminates the need for JUnitPlatform.class and is more in line with JUnit 5’s modularity. You can combine it with @ExtendWith to add custom behavior or extensions if needed.

From my experience, using @ExtendWith is a clean and flexible way to move forward. When migrating from @RunWith(JUnitPlatform.class), you can use @ExtendWith in combination with the JUnit 5 Platform for test execution:

@ExtendWith(JUnitPlatform.class)  // JUnit 5 equivalent  
public class MyJUnit5Test {  
    // Test methods here  
}  

This approach allows seamless migration while retaining control over test discovery and execution. The @ExtendWith annotation gives you room to integrate various JUnit 5 extensions to customize or extend the functionality of your tests.

Personally, I’ve found JUnit 5’s suite configuration tools like @TestMethodOrder and @TestInstance extremely helpful in modernizing test setups. These annotations let you fine-tune execution order and lifecycle management, which often replaces the need for JUnitPlatform.class. For example:

@TestMethodOrder(MethodOrderer.OrderAnnotation.class)  
@TestInstance(TestInstance.Lifecycle.PER_CLASS)  
public class MyTest {  
    @Test  
    @Order(1)  
    void firstTest() {  
        // Your test logic  
    }  
}  

This not only removes the dependency on JUnitPlatform.class but also aligns with JUnit 5’s powerful, annotation-driven design. And yes, you can always pair this with @ExtendWith for enhanced functionality and modularity."

Each of these methods effectively replaces junit5 runwith approaches from older versions, aligning with the streamlined structure of JUnit 5.