Testing / JUnit6 Interview Questions
What is TestWatcher extension interface in JUnit 6 and when do you use it?
The TestWatcher interface provides callbacks for the four possible test outcomes: succeeded, failed, aborted, and disabled. It is simpler than implementing multiple separate extension interfaces when you just want to react to test results.
import org.junit.jupiter.api.extension.TestWatcher; public class SlackNotificationWatcher implements TestWatcher { @Override public void testSuccessful(ExtensionContext ctx) { // Optional: log to metrics dashboard } @Override public void testFailed(ExtensionContext ctx, Throwable cause) { // Alert the team on test failure String testName = ctx.getDisplayName(); String error = cause.getMessage(); slackClient.sendAlert( String.format("Test FAILED: %s%nError: %s", testName, error) ); } @Override public void testAborted(ExtensionContext ctx, Throwable cause) { // Log skipped tests (assumption violated) } @Override public void testDisabled(ExtensionContext ctx, Optional<String> reason) { // Track @Disabled tests for tech debt reporting techDebtTracker.record(ctx.getDisplayName(), reason.orElse("No reason given")); } } // Register: @ExtendWith(SlackNotificationWatcher.class) class CriticalPathTest { @Test void paymentProcessing() { ... } @Test @Disabled("Awaiting payment gateway fix") void refundProcessing() { ... } }
More Related questions...