Bird
Raised Fist0
JUnittesting~10 mins

doReturn and doThrow 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 mock a method to return a value using doReturn.

JUnit
doReturn("mockedValue").when(mockedObject).[1]();
Drag options to blanks, or click blank then click option'
AsomeMethod
BthrowException
CverifyCall
Dexecute
Attempts:
3 left
💡 Hint
Common Mistakes
Using a method name that does not exist in the mocked object.
Confusing doReturn with doThrow.
2fill in blank
medium

Complete the code to mock a method to throw an exception using doThrow.

JUnit
doThrow(new RuntimeException()).when(mockedObject).[1]();
Drag options to blanks, or click blank then click option'
AsomeMethod
Brun
CexecuteAction
DthrowException
Attempts:
3 left
💡 Hint
Common Mistakes
Using doReturn instead of doThrow for exceptions.
Mocking a method that does not throw exceptions.
3fill in blank
hard

Fix the error in the code to correctly mock a method to return a value using doReturn.

JUnit
doReturn("value").when([1]).someMethod();
Drag options to blanks, or click blank then click option'
AmockedObject
BdoReturn
CsomeMethod
DRuntimeException
Attempts:
3 left
💡 Hint
Common Mistakes
Putting the method name inside when() instead of the mocked object.
Using exception classes instead of objects.
4fill in blank
hard

Fill both blanks to mock a method to throw an IllegalArgumentException.

JUnit
doThrow(new [1]()).when([2]).invalidMethod();
Drag options to blanks, or click blank then click option'
AIllegalArgumentException
BmockedService
CRuntimeException
DmockedObject
Attempts:
3 left
💡 Hint
Common Mistakes
Using the wrong exception class.
Confusing the mocked object variable name.
5fill in blank
hard

Fill all three blanks to mock a method to return "success" and verify it was called once.

JUnit
doReturn("[1]").when([2]).process();
verify([3], times(1)).process();
Drag options to blanks, or click blank then click option'
Asuccess
BmockService
DmockedObject
Attempts:
3 left
💡 Hint
Common Mistakes
Using different variables for when() and verify().
Forgetting to match the return value string.

Practice

(1/5)
1. What is the main purpose of doReturn in JUnit mocking?
easy
A. To specify a value that a mocked method should return when called
B. To make a mocked method throw an exception
C. To verify how many times a method was called
D. To reset the state of a mock object

Solution

  1. Step 1: Understand doReturn usage

    doReturn is used to tell a mock what value to return when a specific method is called.
  2. Step 2: Differentiate from doThrow

    doThrow makes the method throw an exception, not return a value.
  3. Final Answer:

    To specify a value that a mocked method should return when called -> Option A
  4. Quick Check:

    doReturn sets return value [OK]
Hint: Remember: doReturn returns a value, doThrow throws exception [OK]
Common Mistakes:
  • Confusing doReturn with doThrow
  • Thinking doReturn verifies method calls
  • Assuming doReturn resets mocks
2. Which of the following is the correct syntax to make a mock method throw an exception using doThrow?
easy
A. doThrow().when(mockObject).methodName(new IOException());
B. doThrow(IOException).when(mockObject).methodName();
C. doThrow(new IOException()).when(mockObject).methodName();
D. doThrow(new IOException).methodName().when(mockObject);

Solution

  1. Step 1: Recall correct doThrow syntax

    The correct syntax is doThrow(new ExceptionType()).when(mock).method(); to specify the exception and method.
  2. Step 2: Check each option

    doThrow(new IOException()).when(mockObject).methodName(); matches the correct syntax exactly. Others have misplaced parentheses or wrong order.
  3. Final Answer:

    doThrow(new IOException()).when(mockObject).methodName(); -> Option C
  4. Quick Check:

    Correct doThrow syntax = doThrow(new IOException()).when(mockObject).methodName(); [OK]
Hint: Use new Exception() inside doThrow, then when(mock).method() [OK]
Common Mistakes:
  • Omitting 'new' before exception
  • Placing parentheses incorrectly
  • Calling method before when()
3. Given the following code snippet, what will be the output when mockService.getData() is called?
MyService mockService = mock(MyService.class);
doReturn("Hello").when(mockService).getData();
doThrow(new RuntimeException()).when(mockService).getData();
System.out.println(mockService.getData());
medium
A. Hello
B. RuntimeException is thrown
C. null
D. Compilation error

Solution

  1. Step 1: Analyze the order of stubbing

    First doReturn("Hello") is set, then doThrow(RuntimeException) overrides it for the same method.
  2. Step 2: Determine which stub applies on method call

    The last stub doThrow takes effect, so calling getData() throws RuntimeException.
  3. Final Answer:

    RuntimeException is thrown -> Option B
  4. Quick Check:

    Last stub wins, so exception thrown [OK]
Hint: Last doReturn or doThrow for method overrides previous [OK]
Common Mistakes:
  • Assuming first stub applies
  • Expecting returned string instead of exception
  • Thinking code won't compile
4. Identify the error in the following code snippet using doReturn and doThrow:
doReturn("Success").when(mockService).process();
doThrow(new IllegalArgumentException()).when(mockService).process();
doReturn("Done").when(mockService).process();
String result = mockService.process();
medium
A. The code will throw IllegalArgumentException at runtime
B. Cannot use doReturn and doThrow on the same method
C. doThrow must be called after doReturn to work
D. The last doReturn overrides previous stubs, so no error

Solution

  1. Step 1: Understand stub overriding order

    Stubs are applied in order; the last stub for a method is effective.
  2. Step 2: Check the last stub

    The last stub is doReturn("Done"), so calling process() returns "Done" without exception.
  3. Final Answer:

    The last doReturn overrides previous stubs, so no error -> Option D
  4. Quick Check:

    Last stub wins, no exception thrown [OK]
Hint: Last stub for method call is effective, no conflict error [OK]
Common Mistakes:
  • Thinking doThrow always throws exception regardless of order
  • Believing mixing doReturn and doThrow causes compile error
  • Expecting exception thrown despite last stub
5. You want to test a method that calls externalService.fetch(). You want to simulate two calls: the first returns "Data1", the second throws an IOException. Which is the correct way to stub fetch() using doReturn and doThrow?
hard
A. doReturn("Data1").doThrow(new IOException()).when(externalService).fetch();
B. doReturn("Data1").when(externalService).fetch(); doThrow(new IOException()).when(externalService).fetch();
C. doReturn("Data1").when(externalService).fetch(); doReturn("Data2").when(externalService).fetch();
D. doThrow(new IOException()).doReturn("Data1").when(externalService).fetch();

Solution

  1. Step 1: Understand chaining stubs for multiple calls

    Mockito allows chaining stubs with doReturn(...).doThrow(...).when(mock).method(); to simulate sequential calls.
  2. Step 2: Analyze options

    doReturn("Data1").doThrow(new IOException()).when(externalService).fetch(); correctly chains doReturn then doThrow for first return and second throw. Separate doReturn("Data1").when(externalService).fetch(); doThrow(new IOException()).when(externalService).fetch(); overrides stubs, causing all calls to throw the exception. The other options use repeated returns or incorrect order.
  3. Final Answer:

    doReturn("Data1").doThrow(new IOException()).when(externalService).fetch(); -> Option A
  4. Quick Check:

    Chain doReturn then doThrow for sequential calls [OK]
Hint: Chain doReturn().doThrow() for sequential call behaviors [OK]
Common Mistakes:
  • Overwriting stubs instead of chaining
  • Wrong order of doThrow and doReturn
  • Expecting multiple when() calls for sequence
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