Bird
Raised Fist0
JUnittesting~10 mins

assertTimeout for performance 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 assert that the method finishes within 1 second.

JUnit
assertTimeout(Duration.ofSeconds([1]), () -> methodToTest());
Drag options to blanks, or click blank then click option'
A10
B1
C0
D5
Attempts:
3 left
💡 Hint
Common Mistakes
Using a timeout value too large or zero, which defeats the purpose of performance testing.
2fill in blank
medium

Complete the code to assert that the lambda expression finishes within 500 milliseconds.

JUnit
assertTimeout(Duration.ofMillis([1]), () -> someFunction());
Drag options to blanks, or click blank then click option'
A1000
B50
C500
D1500
Attempts:
3 left
💡 Hint
Common Mistakes
Confusing milliseconds with seconds and using Duration.ofSeconds() instead.
3fill in blank
hard

Fix the error in the code by completing the blank with the correct import for Duration.

JUnit
import [1];

assertTimeout(Duration.ofSeconds(2), () -> processData());
Drag options to blanks, or click blank then click option'
Ajava.time.Duration
Bjava.io.Duration
Cjava.lang.Duration
Djava.util.Duration
Attempts:
3 left
💡 Hint
Common Mistakes
Importing from the wrong package causes compilation errors.
4fill in blank
hard

Fill both blanks to assert that the method finishes within 3 seconds and returns the expected value.

JUnit
String result = assertTimeout(Duration.ofSeconds([1]), () -> [2]);
assertEquals("success", result);
Drag options to blanks, or click blank then click option'
A3
BperformTask()
Cexecute()
D5
Attempts:
3 left
💡 Hint
Common Mistakes
Using a wrong method name or wrong timeout duration.
5fill in blank
hard

Fill all three blanks to assert that the method finishes within 200 milliseconds, returns a non-null value, and the result equals "done".

JUnit
var result = assertTimeout(Duration.ofMillis([1]), () -> [2]);
assertNotNull(result);
assertEquals([3], result);
Drag options to blanks, or click blank then click option'
A200
BrunProcess()
C"done"
D"completed"
Attempts:
3 left
💡 Hint
Common Mistakes
Using wrong timeout units or wrong expected string.

Practice

(1/5)
1. What is the main purpose of assertTimeout in JUnit testing?
easy
A. To test if exceptions are thrown correctly
B. To check if a block of code finishes execution within a specified time limit
C. To verify the correctness of output values
D. To compare two objects for equality

Solution

  1. Step 1: Understand the role of assertTimeout

    assertTimeout is used to ensure that a piece of code completes within a given time limit.
  2. Step 2: Differentiate from other assertions

    Other assertions check correctness or exceptions, but assertTimeout focuses on performance timing.
  3. Final Answer:

    To check if a block of code finishes execution within a specified time limit -> Option B
  4. Quick Check:

    assertTimeout checks execution time = C [OK]
Hint: assertTimeout checks speed, not correctness or exceptions [OK]
Common Mistakes:
  • Confusing assertTimeout with assertEquals
  • Thinking assertTimeout checks output correctness
  • Assuming assertTimeout tests exception throwing
2. Which of the following is the correct syntax to use assertTimeout in JUnit 5 to test a method processData() with a 2-second limit?
easy
A. assertTimeout(Duration.ofSeconds(2), () -> processData());
B. assertTimeout(2, processData());
C. assertTimeout(2000, () -> processData());
D. assertTimeout(Duration.seconds(2), processData());

Solution

  1. Step 1: Recall correct Duration usage

    JUnit 5 uses Duration.ofSeconds(2) to specify 2 seconds.
  2. Step 2: Confirm lambda syntax

    The code block must be passed as a lambda: () -> processData().
  3. Final Answer:

    assertTimeout(Duration.ofSeconds(2), () -> processData()); -> Option A
  4. Quick Check:

    Duration.ofSeconds + lambda = A [OK]
Hint: Use Duration.ofSeconds and lambda for assertTimeout [OK]
Common Mistakes:
  • Passing method call directly instead of lambda
  • Using integer instead of Duration object
  • Wrong Duration method like Duration.seconds
3. Given the code below, what will be the test result?
assertTimeout(Duration.ofMillis(500), () -> {
    Thread.sleep(300);
    Thread.sleep(250);
});
medium
A. Test passes because total sleep is 550ms which is less than 500ms
B. Test passes because each sleep is less than 500ms
C. Test fails because total sleep is 550ms which exceeds 500ms
D. Test fails due to syntax error in lambda

Solution

  1. Step 1: Calculate total sleep time

    Thread sleeps 300ms + 250ms = 550ms total.
  2. Step 2: Compare with timeout limit

    Timeout is 500ms, so 550ms exceeds the limit causing failure.
  3. Final Answer:

    Test fails because total sleep is 550ms which exceeds 500ms -> Option C
  4. Quick Check:

    Total sleep 550ms > 500ms timeout = B [OK]
Hint: Sum all delays and compare to timeout [OK]
Common Mistakes:
  • Ignoring cumulative sleep time
  • Assuming each sleep is checked separately
  • Thinking test passes if individual sleeps are under limit
4. Identify the error in this JUnit 5 test using assertTimeout:
assertTimeout(Duration.ofSeconds(1), processData());
medium
A. processData() must return a boolean
B. Duration.ofSeconds should be Duration.seconds
C. assertTimeout requires a timeout in milliseconds
D. Missing lambda expression to defer execution

Solution

  1. Step 1: Check how code block is passed

    assertTimeout expects a lambda or executable to delay running until assertion.
  2. Step 2: Identify missing lambda

    Here, processData() is called immediately, not deferred by lambda.
  3. Final Answer:

    Missing lambda expression to defer execution -> Option D
  4. Quick Check:

    assertTimeout needs lambda to delay execution = A [OK]
Hint: Always wrap code in lambda for assertTimeout [OK]
Common Mistakes:
  • Calling method directly instead of lambda
  • Using wrong Duration method
  • Expecting assertTimeout to accept milliseconds as int
5. You want to test a method calculate() that sometimes takes longer but should not exceed 3 seconds. Which approach correctly uses assertTimeout to fail the test if calculate() exceeds 3 seconds, and also returns the method's result for further checks?
hard
A. var result = assertTimeout(Duration.ofSeconds(3), () -> { return calculate(); });
B. assertTimeout(Duration.ofSeconds(3), () -> { calculate(); });
C. assertTimeout(Duration.ofSeconds(3), () -> { return calculate(); });
D. var result = assertTimeout(Duration.ofSeconds(3), calculate());

Solution

  1. Step 1: Understand assertTimeout return value

    assertTimeout returns the value from the lambda if it completes in time.
  2. Step 2: Use lambda with return and assign result

    To capture calculate() result, lambda must return it and assign to a variable.
  3. Step 3: Check syntax correctness

    var result = assertTimeout(Duration.ofSeconds(3), () -> { return calculate(); }); uses lambda with return and assigns to result, matching requirements.
  4. Final Answer:

    var result = assertTimeout(Duration.ofSeconds(3), () -> { return calculate(); }); -> Option A
  5. Quick Check:

    Return value + assign result + timeout = D [OK]
Hint: Use lambda with return and assign to capture result [OK]
Common Mistakes:
  • Not returning value inside lambda
  • Not assigning assertTimeout result
  • Using lambda without return for non-void methods
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