Bird
Raised Fist0
JUnittesting~5 mins

@AfterEach method in JUnit - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the purpose of the @AfterEach annotation in JUnit?
The @AfterEach annotation marks a method to be run after each test method. It is used to clean up or reset resources to keep tests independent.
Click to reveal answer
beginner
When is a method annotated with @AfterEach executed?
It runs immediately after each test method finishes, regardless of whether the test passed or failed.
Click to reveal answer
intermediate
Can multiple methods in the same test class have <code>@AfterEach</code> annotation?
Yes, multiple @AfterEach methods are allowed. They run in an undefined order after each test method.
Click to reveal answer
intermediate
How does @AfterEach differ from @AfterAll in JUnit?
<code>@AfterEach</code> runs after every test method, while <code>@AfterAll</code> runs once after all tests in the class have run.
Click to reveal answer
beginner
Give a simple example of a method using @AfterEach.
Example:
  @AfterEach
  void cleanup() {
    // reset shared resources
  }
Click to reveal answer
What happens if a test method throws an exception? Does the @AfterEach method still run?
AOnly if the exception is caught inside the test.
BNo, <code>@AfterEach</code> only runs if the test passes.
CYes, <code>@AfterEach</code> runs even if the test fails or throws an exception.
DIt depends on the exception type.
Which annotation runs a method once after all tests in a class have finished?
A@BeforeEach
B@AfterAll
C@AfterEach
D@BeforeAll
Can you have more than one @AfterEach method in a test class?
AOnly if they are static methods.
BNo, only one is allowed.
CYes, but only if they have different names.
DYes, multiple are allowed and run in any order.
What is a common use case for @AfterEach methods?
ATo clean up or reset resources after each test.
BTo initialize test data before each test.
CTo run tests in parallel.
DTo skip tests conditionally.
If you want to release a database connection after each test, which annotation should you use on the cleanup method?
A@AfterEach
B@BeforeEach
C@BeforeAll
D@AfterAll
Explain the role and timing of the @AfterEach method in JUnit testing.
Think about what happens after every test finishes.
You got /3 concepts.
    Describe the difference between @AfterEach and @AfterAll annotations.
    Consider how often each runs during the test lifecycle.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of a method annotated with @AfterEach in JUnit?
      easy
      A. To define a test method itself
      B. To run code before any test methods start
      C. To run cleanup code after each test method executes
      D. To skip a test method during execution

      Solution

      1. Step 1: Understand the role of @AfterEach

        The @AfterEach annotation marks methods that run after every test method to clean up or reset state.
      2. Step 2: Compare options with this role

        Only To run cleanup code after each test method executes correctly describes this cleanup role after each test method.
      3. Final Answer:

        To run cleanup code after each test method executes -> Option C
      4. Quick Check:

        @AfterEach = cleanup after tests [OK]
      Hint: Remember: @AfterEach runs after every test method [OK]
      Common Mistakes:
      • Confusing @AfterEach with @BeforeEach
      • Thinking @AfterEach defines test methods
      • Assuming @AfterEach skips tests
      2. Which of the following is the correct method signature for a method annotated with @AfterEach in JUnit?
      easy
      A. public int cleanup()
      B. public void cleanup()
      C. public void cleanup(String param)
      D. public static void cleanup()

      Solution

      1. Step 1: Recall method requirements for @AfterEach

        Methods with @AfterEach must be void, no-argument, and instance methods (not static).
      2. Step 2: Check each option

        public void cleanup() matches: public, void return, no parameters, instance method. Options B and C have wrong return type or parameters. public static void cleanup() is static, which is not allowed.
      3. Final Answer:

        public void cleanup() -> Option B
      4. Quick Check:

        @AfterEach method = void, no-args, non-static [OK]
      Hint: @AfterEach methods are void, no parameters, non-static [OK]
      Common Mistakes:
      • Adding parameters to @AfterEach methods
      • Making @AfterEach methods static
      • Using non-void return types
      3. Consider the following JUnit test class snippet:
      class ExampleTest {
        int count = 0;
      
        @AfterEach
        void reset() {
          count = 0;
        }
      
        @Test
        void testIncrement() {
          count++;
          assertEquals(1, count);
        }
      
        @Test
        void testDecrement() {
          count--;
          assertEquals(-1, count);
        }
      }

      What will be the result when running both tests?
      medium
      A. Both tests pass because count resets after each test
      B. Both tests fail because count is shared and not reset
      C. testIncrement passes, testDecrement fails
      D. testIncrement fails, testDecrement passes

      Solution

      1. Step 1: Understand @AfterEach effect on count

        The reset() method sets count to 0 after each test method runs, so each test starts fresh.
      2. Step 2: Analyze each test

        In testIncrement(), count increments from 0 to 1, assertion matches. In testDecrement(), count decrements from 0 to -1, assertion matches. Both pass.
      3. Final Answer:

        Both tests pass because count resets after each test -> Option A
      4. Quick Check:

        @AfterEach resets state = tests independent [OK]
      Hint: @AfterEach resets variables so tests don't affect each other [OK]
      Common Mistakes:
      • Assuming count keeps value between tests
      • Forgetting @AfterEach runs after each test
      • Confusing @AfterEach with @BeforeEach
      4. Identify the error in this JUnit test class:
      class SampleTest {
      
        @AfterEach
        public static void cleanup() {
          System.out.println("Cleaning up");
        }
      
        @Test
        void testSomething() {
          assertTrue(true);
        }
      }
      medium
      A. The @AfterEach method should not be static
      B. The @AfterEach method must return boolean
      C. The @Test method must be static
      D. The @AfterEach method must have parameters

      Solution

      1. Step 1: Check @AfterEach method signature rules

        @AfterEach methods must be instance methods (non-static), void, and no-argument.
      2. Step 2: Identify the error in the code

        The method cleanup() is declared static, which violates the rule.
      3. Final Answer:

        The @AfterEach method should not be static -> Option A
      4. Quick Check:

        @AfterEach methods cannot be static [OK]
      Hint: @AfterEach methods must be instance, not static [OK]
      Common Mistakes:
      • Making @AfterEach methods static
      • Adding parameters to @AfterEach methods
      • Changing return type from void
      5. You have a test class where each test opens a database connection. You want to ensure the connection closes after each test to avoid resource leaks. Which is the best way to do this using @AfterEach?
      hard
      A. Do not close the connection; let JVM handle it
      B. Call connection.close() at the start of each test method
      C. Use @BeforeEach to close the connection before tests
      D. Annotate a method that calls connection.close() with @AfterEach

      Solution

      1. Step 1: Understand resource cleanup best practice

        Resources like database connections should be closed after each test to avoid leaks and interference.
      2. Step 2: Apply @AfterEach for cleanup

        Using a method annotated with @AfterEach to close the connection ensures it happens after every test, keeping tests independent and safe.
      3. Final Answer:

        Annotate a method that calls connection.close() with @AfterEach -> Option D
      4. Quick Check:

        @AfterEach = cleanup resources after tests [OK]
      Hint: Use @AfterEach to close resources after each test [OK]
      Common Mistakes:
      • Closing resources before tests instead of after
      • Not closing resources causing leaks
      • Relying on JVM to close resources automatically
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard