Bird
Raised Fist0
JUnittesting~10 mins

Timeout annotations in JUnit - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to set a timeout of 100 milliseconds on the test method.

JUnit
@Test
@Timeout([1])
void testQuickOperation() {
    // test code here
}
Drag options to blanks, or click blank then click option'
A10
B1000
C100
D500
Attempts:
3 left
💡 Hint
Common Mistakes
Using 1000 instead of 100 causes longer timeout than intended.
Omitting the @Timeout annotation means no timeout is set.
2fill in blank
medium

Complete the code to import the Timeout annotation from JUnit Jupiter.

JUnit
import org.junit.jupiter.api.[1];

public class MyTests {
    @Test
    @Timeout(200)
    void testMethod() {}
}
Drag options to blanks, or click blank then click option'
ATest
BAfterAll
CBeforeEach
DTimeout
Attempts:
3 left
💡 Hint
Common Mistakes
Importing @Test instead of @Timeout.
Using annotations from other packages.
3fill in blank
hard

Fix the error in the timeout annotation usage to specify the time unit as seconds.

JUnit
@Test
@Timeout(value = 2, unit = [1])
void testWithSecondsTimeout() {
    // test code
}
Drag options to blanks, or click blank then click option'
AChronoUnit.SECONDS
BTimeUnit.SECONDS
CTimeUnit.MILLISECONDS
DDuration.SECONDS
Attempts:
3 left
💡 Hint
Common Mistakes
Using ChronoUnit which is for date/time, not Timeout.
Using Duration.SECONDS which does not exist.
4fill in blank
hard

Fill both blanks to set a timeout of 500 milliseconds using the Timeout annotation with explicit value and unit.

JUnit
@Test
@Timeout(value = [1], unit = [2])
void testHalfSecondTimeout() {
    // test code
}
Drag options to blanks, or click blank then click option'
A500
B1000
CTimeUnit.MILLISECONDS
DTimeUnit.SECONDS
Attempts:
3 left
💡 Hint
Common Mistakes
Mixing up value and unit parameters.
Using seconds unit with 500 value expecting milliseconds.
5fill in blank
hard

Fill all three blanks to create a test method with a 3-second timeout and a descriptive display name.

JUnit
@Test
@Timeout(value = [1], unit = [2])
@DisplayName([3])
void testTimeoutWithName() {
    // test code
}
Drag options to blanks, or click blank then click option'
A3
BTimeUnit.SECONDS
C"Test with 3 seconds timeout"
D"Timeout test"
Attempts:
3 left
💡 Hint
Common Mistakes
Using incorrect unit for timeout.
Forgetting quotes around display name string.

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