Bird
Raised Fist0
JUnittesting~5 mins

when().thenReturn() stubbing in JUnit - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does when().thenReturn() do in JUnit testing?

when().thenReturn() is used to tell a mock object what value to return when a specific method is called. It helps simulate behavior for testing.

Click to reveal answer
beginner
How do you stub a method getName() of a mock object userMock to return "Alice"?
when(userMock.getName()).thenReturn("Alice");
Click to reveal answer
beginner
Why is stubbing useful in unit tests?

Stubbing lets you control the output of dependencies so you can test your code in isolation without relying on real objects or external systems.

Click to reveal answer
intermediate
What happens if you call a method on a mock without stubbing it first?

By default, the mock returns default values like null, 0, or false. It does not execute real code.

Click to reveal answer
intermediate
Can thenReturn() be used to return different values on consecutive calls?

Yes, you can chain thenReturn() calls to return different values each time the method is called.

when(mock.method()).thenReturn(1, 2);
Click to reveal answer
What is the purpose of when().thenReturn() in JUnit?
ATo stub a method call on a mock object
BTo verify a method was called
CTo create a real object
DTo throw an exception
Which of these is a correct stubbing syntax?
AthenReturn(value).when(mock.method());
Bmock.when(method()).thenReturn(value);
Cwhen(mock.method()).thenReturn(value);
Dmock.method().when().thenReturn(value);
If you do not stub a method on a mock, what will it return by default?
AThe real method's return value
BA default value like null or 0
CAn exception
DNothing, it will crash
How can you make a stub return different values on consecutive calls?
AChain multiple <code>thenReturn()</code> calls
BUse multiple <code>when()</code> calls
CUse <code>thenThrow()</code>
DIt is not possible
Which library provides when().thenReturn() for mocking in JUnit tests?
ATestNG
BJUnit
CSelenium
DMockito
Explain how when().thenReturn() helps in unit testing with mocks.
Think about how you tell a mock what to do when a method is called.
You got /4 concepts.
    Describe the default behavior of a mock object when a method is called without stubbing.
    What happens if you forget to stub a method on a mock?
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of when().thenReturn() in JUnit testing?
      easy
      A. To specify a fake return value for a mocked method call
      B. To execute the real method instead of a mock
      C. To verify that a method was called
      D. To create a new instance of the class under test

      Solution

      1. Step 1: Understand mocking in tests

        Mocking replaces real objects with fake ones to control behavior during tests.
      2. Step 2: Role of when().thenReturn()

        This syntax sets a fake return value for a method call on a mock object.
      3. Final Answer:

        To specify a fake return value for a mocked method call -> Option A
      4. Quick Check:

        when().thenReturn() = fake return value [OK]
      Hint: Remember: when().thenReturn() fakes method results [OK]
      Common Mistakes:
      • Thinking it calls the real method
      • Using it on real objects instead of mocks
      • Confusing it with verification methods
      2. Which of the following is the correct syntax to stub a method getName() of a mock object userMock to return "Alice"?
      easy
      A. thenReturn("Alice").when(userMock.getName());
      B. when(userMock.getName()).thenReturn("Alice");
      C. userMock.when(getName()).thenReturn("Alice");
      D. when(userMock.getName() == "Alice");

      Solution

      1. Step 1: Recall correct when().thenReturn() syntax

        The correct order is when(methodCall).thenReturn(value);
      2. Step 2: Check each option

        when(userMock.getName()).thenReturn("Alice"); matches the correct syntax exactly; others are invalid or reversed.
      3. Final Answer:

        when(userMock.getName()).thenReturn("Alice"); -> Option B
      4. Quick Check:

        Correct syntax = when().thenReturn() [OK]
      Hint: Syntax is when(methodCall).thenReturn(value) [OK]
      Common Mistakes:
      • Reversing when() and thenReturn() order
      • Calling when() on the mock object instead of method
      • Using equality inside when()
      3. Given the code below, what will result print?
      List<String> mockList = mock(List.class);
      when(mockList.size()).thenReturn(5);
      int result = mockList.size();
      System.out.println(result);
      medium
      A. 0
      B. null
      C. 5
      D. Throws NullPointerException

      Solution

      1. Step 1: Understand stubbing of mockList.size()

        The size() method is stubbed to return 5 whenever called on mockList.
      2. Step 2: Check the printed result

        Calling mockList.size() returns 5 as stubbed, so result is 5 and prints 5.
      3. Final Answer:

        5 -> Option C
      4. Quick Check:

        Stubbed method returns set value [OK]
      Hint: Stubbed methods return thenReturn() value, not default [OK]
      Common Mistakes:
      • Assuming default mock return 0 instead of stubbed 5
      • Expecting real method execution
      • Confusing null with int return
      4. Identify the error in the following stubbing code:
      MyService service = new MyService();
      when(service.getData()).thenReturn("Mocked Data");
      medium
      A. Cannot stub a method on a real object, must mock it first
      B. Missing semicolon after thenReturn()
      C. Incorrect method name getData()
      D. thenReturn() cannot return a String

      Solution

      1. Step 1: Check object type used in when()

        The object service is a real instance, not a mock, so stubbing is invalid.
      2. Step 2: Understand mocking requirement

        Stubbing works only on mock objects created by mock() or similar methods.
      3. Final Answer:

        Cannot stub a method on a real object, must mock it first -> Option A
      4. Quick Check:

        Stub only mocks, not real objects [OK]
      Hint: Stub only mock objects, not real instances [OK]
      Common Mistakes:
      • Trying to stub real objects
      • Ignoring need to mock before stubbing
      • Assuming thenReturn() syntax error
      5. You want to stub a method calculate(int x) of a mock calculatorMock to return x * 2 for any integer input. Which is the correct way to do this using when().thenReturn()?
      hard
      A. when(calculatorMock.calculate(2)).thenReturn(4);
      B. when(calculatorMock.calculate(anyInt())).thenReturn(x * 2);
      C. when(calculatorMock.calculate(anyInt())).thenReturn(2);
      D. when(calculatorMock.calculate(anyInt())).thenAnswer(invocation -> (int) invocation.getArgument(0) * 2);

      Solution

      1. Step 1: Understand when().thenReturn() limitation

        thenReturn() returns a fixed value, cannot compute based on input parameter.
      2. Step 2: Use thenAnswer() for dynamic return

        thenAnswer() allows lambda to compute return based on method arguments.
      3. Final Answer:

        when(calculatorMock.calculate(anyInt())).thenAnswer(invocation -> (int) invocation.getArgument(0) * 2); -> Option D
      4. Quick Check:

        Dynamic return needs thenAnswer(), not thenReturn() [OK]
      Hint: Use thenAnswer() for dynamic returns, not thenReturn() [OK]
      Common Mistakes:
      • Trying to compute dynamic values with thenReturn()
      • Using undefined variable x in thenReturn()
      • Stubbing only one input value instead of anyInt()
      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