Explain Codes LogoExplain Codes Logo

Throw checked Exceptions from mocks with Mockito

java
mockito
exception-handling
test-automation
Nikita BarsukovbyNikita Barsukov·Dec 10, 2024
TLDR

Here's how to mock a checked exception swiftly in Mockito using thenThrow:

MyClass myMock = Mockito.mock(MyClass.class); // "If it ain't broke, don't fix it," said no tester ever. Mockito.when(myMock.method()).thenThrow(MyCheckedException.class); // "Hold my coffee," said the test, right before the exception. myMock.method(); // Throws MyCheckedException

Provide your specific Exception.class instead of MyCheckedException.class.

Remember, keep an eye on the method’s signature. Check that the exception you are throwing is declared in there.

Method signatures, the silent guardians

Ensure that the checked exception and the method signature of the class or interface that you are mocking are the perfect dancing partners. They need to groove together on the method declaration dance floor. So, make sure your declared exception and method signature are in sync.

doAnswer() and willAnswer(), the dynamic duo

For your test cases to perform additional actions, use our dynamic duo - Mockito.doAnswer() or its BDD counterpart BDDMockito.given().willAnswer(). These methods will imitate the conduct of the mastermind behind the scene and throw those cryptic checked exceptions around.

Checkpoint: Exception validity

Be cautious when using Mockito.when().thenThrow() or doAnswer(). You want to make sure your mock exception isn't considered an outcast. It must stick to the method contract rule to avoid being singled out by Mockito.

Choose your fighter: Unchecked exceptions

If you prefer living life on the edge, use unchecked exceptions like RuntimeException or ArrayIndexOutOfBoundsException. They can defy the method signature constraints, keeping your mock exceptions on a leash.

Mockito fundamentals

Never forget to align the mocked method signature with the checked exception type you're about to throw. The match will create a seamless flow, prevent runtime blow-ups, and keep your test cases robust and trustworthy.

BDD in Mockito, a modern tale

Fan of Behavior-Driven Development (BDD)? BDDMockito.given() coupled with willAnswer() lets you articulate your tests in a more conversational style all while gaining the power to throw checked exceptions effectively.

Advanced warfare

In this challenging landscape, ensuring your mocks are interacting correctly with your exception-handling logic can become an action-packed adventure. Wield the weapon of Mockito.verify() with precision to check if the exception is thrown and handled as expected during the action scene.