0
0
JUnittesting~20 mins

@AfterEach method in JUnit - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
JUnit @AfterEach Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
What is the output of this JUnit test with @AfterEach?
Consider the following JUnit 5 test class. What will be printed to the console when the tests run?
JUnit
import org.junit.jupiter.api.*;

public class SampleTest {

    @BeforeEach
    void setup() {
        System.out.println("Setup");
    }

    @Test
    void testOne() {
        System.out.println("Test One");
    }

    @Test
    void testTwo() {
        System.out.println("Test Two");
    }

    @AfterEach
    void cleanup() {
        System.out.println("Cleanup");
    }
}
ASetup\nTest One\nCleanup\nSetup\nTest Two\nCleanup
BSetup\nTest One\nSetup\nTest Two\nCleanup\nCleanup
CSetup\nTest One\nTest Two\nCleanup\nCleanup
DTest One\nSetup\nCleanup\nTest Two\nSetup\nCleanup
Attempts:
2 left
💡 Hint
Remember that @BeforeEach and @AfterEach run before and after each test method.
assertion
intermediate
2:00remaining
Which assertion correctly verifies @AfterEach method execution?
You want to verify that a resource is closed after each test using @AfterEach. Which assertion in the test class correctly checks this?
JUnit
import org.junit.jupiter.api.*;
import static org.junit.jupiter.api.Assertions.*;

class ResourceTest {
    private Resource resource;

    @BeforeEach
    void init() {
        resource = new Resource();
        resource.open();
    }

    @Test
    void testResourceUsage() {
        assertTrue(resource.isOpen());
    }

    @AfterEach
    void cleanup() {
        resource.close();
        // Which assertion here verifies cleanup?
        // ???
    }

    class Resource {
        private boolean open = false;
        void open() { open = true; }
        void close() { open = false; }
        boolean isOpen() { return open; }
    }
}
AassertNull(resource);
BassertTrue(resource.isOpen());
CassertEquals(true, resource.isOpen());
DassertFalse(resource.isOpen());
Attempts:
2 left
💡 Hint
After cleanup, the resource should be closed, so isOpen() should be false.
🔧 Debug
advanced
2:00remaining
Why does the @AfterEach method not run after a test failure?
Given this test class, the @AfterEach method is not executed after a failing test. What is the most likely cause?
JUnit
import org.junit.jupiter.api.*;

class FailureTest {

    @Test
    void testFail() {
        Assertions.fail("Failing test");
    }

    @AfterEach
    void afterEach() {
        System.out.println("Cleanup after test");
    }
}
AThe test framework version is outdated and does not support @AfterEach.
B@AfterEach is skipped if the test throws an exception.
CJUnit always runs @AfterEach even if the test fails; the problem is elsewhere.
DThe test method must be static for @AfterEach to run.
Attempts:
2 left
💡 Hint
Think about JUnit 5 lifecycle guarantees.
🧠 Conceptual
advanced
1:30remaining
What is the main purpose of the @AfterEach method in JUnit?
Choose the best description of the @AfterEach method's role in JUnit testing.
ATo run code once before all tests in the class start.
BTo run code after each test method to clean up resources or reset state.
CTo run code before each test method to set up test data.
DTo run code only if a test method fails.
Attempts:
2 left
💡 Hint
Think about when you want to reset or clean after tests.
framework
expert
2:30remaining
How to ensure @AfterEach runs even if a test times out or is interrupted?
In JUnit 5, you want to guarantee that cleanup code in @AfterEach runs even if a test times out or is interrupted. Which approach ensures this behavior?
AUse try-finally inside the test method for cleanup instead of @AfterEach.
BConfigure the test timeout with assertTimeoutPreemptively and place cleanup in @AfterEach.
CUse @AfterAll instead of @AfterEach for cleanup.
DJUnit 5 does not guarantee @AfterEach runs if a test is interrupted or times out.
Attempts:
2 left
💡 Hint
Consider how preemptive timeouts affect test lifecycle methods.