Bird
Raised Fist0
JUnittesting~10 mins

Timeout annotations in JUnit - Test Execution Trace

Choose your learning style10 modes available
Test Overview

This test checks that a method completes within a specified time limit using JUnit's timeout annotation. It verifies the test fails if the method runs longer than allowed.

Test Code - JUnit 5
JUnit
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import java.util.concurrent.TimeUnit;
import static org.junit.jupiter.api.Assertions.*;

public class TimeoutTest {

    @Test
    @Timeout(value = 2, unit = TimeUnit.SECONDS)
    void testMethodCompletesWithinTimeout() throws InterruptedException {
        // Simulate work that takes 1 second
        Thread.sleep(1000);
        assertTrue(true);
    }

    @Test
    @Timeout(value = 1, unit = TimeUnit.SECONDS)
    void testMethodExceedsTimeout() throws InterruptedException {
        // Simulate work that takes 2 seconds
        Thread.sleep(2000);
        assertTrue(true);
    }
}
Execution Trace - 5 Steps
StepActionSystem StateAssertionResult
1Test runner starts and loads TimeoutTest classJUnit test environment initialized—PASS
2Runs testMethodCompletesWithinTimeout with 2 seconds timeoutMethod starts, simulates 1 second sleepCheck method finishes before 2 seconds timeoutPASS
3Assertion assertTrue(true) executesMethod completed successfully within timeassertTrue condition is truePASS
4Runs testMethodExceedsTimeout with 1 second timeoutMethod starts, simulates 2 seconds sleepCheck method finishes before 1 second timeoutFAIL
5Timeout exceeded, test runner interrupts methodMethod interrupted due to timeoutTimeout exceeded exception thrownFAIL
Failure Scenario
Failing Condition: Method execution time exceeds the specified timeout value
Execution Trace Quiz - 3 Questions
Test your understanding
What causes the testMethodExceedsTimeout test to fail?
AThe method runs longer than the specified timeout
BThe assertion assertTrue(false) fails
CThe test method throws a NullPointerException
DThe test method completes instantly
Key Result
Using timeout annotations helps catch tests that hang or run too long, ensuring faster feedback and preventing stalled test suites.

Practice

(1/5)
1. What is the main purpose of the @Timeout annotation in JUnit tests?
easy
A. To mark a test as expected to fail
B. To repeat a test multiple times automatically
C. To skip a test during execution
D. To stop a test if it runs longer than a specified time limit

Solution

  1. Step 1: Understand the role of @Timeout

    The @Timeout annotation sets a maximum time limit for a test method to run.
  2. Step 2: Identify what happens when time limit is exceeded

    If the test runs longer than the specified time, it is stopped and marked as failed.
  3. Final Answer:

    To stop a test if it runs longer than a specified time limit -> Option D
  4. Quick Check:

    @Timeout stops long tests = A [OK]
Hint: Timeout means stop test if too slow [OK]
Common Mistakes:
  • Confusing timeout with repeating tests
  • Thinking timeout skips tests
  • Assuming timeout marks tests as expected failures
2. Which of the following is the correct way to set a timeout of 5 seconds on a JUnit 5 test method?
easy
A. @Timeout(5)
B. @Timeout(5, SECONDS)
C. @Timeout(value = 5, unit = TimeUnit.SECONDS)
D. @Timeout(value = 5, unit = SECONDS)

Solution

  1. Step 1: Recall JUnit 5 @Timeout syntax

    The @Timeout annotation requires a value and a time unit specified as an enum from java.util.concurrent.TimeUnit.
  2. Step 2: Match correct syntax

    @Timeout(value = 5, unit = TimeUnit.SECONDS) uses named parameters with value=5 and unit=TimeUnit.SECONDS, which is correct syntax.
  3. Final Answer:

    @Timeout(value = 5, unit = TimeUnit.SECONDS) -> Option C
  4. Quick Check:

    Use named params with TimeUnit enum = C [OK]
Hint: Use named params and TimeUnit enum for timeout [OK]
Common Mistakes:
  • Omitting the time unit
  • Using wrong enum or missing TimeUnit prefix
  • Passing timeout as single unnamed parameter
3. Consider this JUnit 5 test method:
@Test
@Timeout(value = 2, unit = TimeUnit.SECONDS)
void testSleep() throws InterruptedException {
    Thread.sleep(3000);
}
What will happen when this test runs?
medium
A. The test will fail due to timeout after 2 seconds
B. The test will pass after sleeping 3 seconds
C. The test will fail immediately with an exception
D. The test will be skipped because of timeout

Solution

  1. Step 1: Analyze the timeout and sleep duration

    The test has a timeout of 2 seconds but sleeps for 3 seconds, which is longer than allowed.
  2. Step 2: Understand test behavior on timeout

    JUnit will stop the test after 2 seconds and mark it as failed due to timeout.
  3. Final Answer:

    The test will fail due to timeout after 2 seconds -> Option A
  4. Quick Check:

    Sleep longer than timeout causes failure = B [OK]
Hint: Sleep longer than timeout causes fail [OK]
Common Mistakes:
  • Thinking test passes despite long sleep
  • Assuming test fails immediately without waiting
  • Believing test is skipped instead of failed
4. This JUnit 5 test uses @Timeout(1) but does not compile. What is the error?
@Test
@Timeout(1)
void testMethod() {
    // test code
}
medium
A. Missing import for @Timeout annotation
B. Timeout annotation requires a time unit parameter
C. Timeout value must be a string, not an integer
D. Timeout annotation cannot be used on void methods

Solution

  1. Step 1: Check @Timeout annotation parameters

    The @Timeout annotation requires both a value and a time unit parameter in JUnit 5.
  2. Step 2: Identify missing time unit

    Using @Timeout(1) without specifying the time unit causes a compilation error.
  3. Final Answer:

    Timeout annotation requires a time unit parameter -> Option B
  4. Quick Check:

    Missing time unit parameter = A [OK]
Hint: Specify time unit with @Timeout [OK]
Common Mistakes:
  • Forgetting to specify time unit
  • Using @Timeout without time unit
  • Thinking @Timeout only works on non-void methods
5. You want to apply a timeout of 500 milliseconds to all test methods in a JUnit 5 test class. Which is the best way to do this?
hard
A. Add @Timeout(value = 500, unit = TimeUnit.MILLISECONDS) on the test class
B. Use Thread.sleep(500) in each test method
C. Set a global timeout property in the JUnit configuration file
D. Add @Timeout(value = 500, unit = TimeUnit.MILLISECONDS) on each test method

Solution

  1. Step 1: Understand class-level @Timeout usage

    JUnit 5 allows applying @Timeout at the class level to set a timeout for all test methods inside.
  2. Step 2: Compare options for efficiency

    Adding @Timeout on the class is simpler and ensures all tests have the timeout without repeating annotation.
  3. Final Answer:

    Add @Timeout(value = 500, unit = TimeUnit.MILLISECONDS) on the test class -> Option A
  4. Quick Check:

    Class-level @Timeout applies to all tests = D [OK]
Hint: Put @Timeout on class to affect all tests [OK]
Common Mistakes:
  • Adding @Timeout repeatedly on each method
  • Trying to set timeout via sleep calls
  • Assuming global config sets timeout 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