I want to throw an Exception when running a void method
when(booking.validate(any())).thenThrow(BookingException.builder().build());
but I have a compilation error:
Required type: T
Provided: void
reason: no instance(s) of type variable(s) T exist so that void conforms to T
For void methods, I think you need to use the doThrow
syntax.
So in your case it would be:
doThrow(BookingException.builder().build())
.when(booking)
.validate(any());
I hope this helps.
I Figured out the right syntax.
Service mockedService = new DefaultServie();
doNothing().when(mockedService).sendReportingLogs(null);
Hope this answers the questions
/**
* Use <code>doThrow()</code> when you want to stub the void method with an exception.
* <p>
* Stubbing voids requires different approach from {@link Mockito#when(Object)} because the compiler
* does not like void methods inside brackets...
* <p>
* Example:
*
* <pre class="code"><code class="java">
* doThrow(new RuntimeException()).when(mock).someVoidMethod();
* </code></pre>
*
* @param toBeThrown to be thrown when the stubbed method is called
* @return stubber - to select a method for stubbing
*/
@CheckReturnValue
public static Stubber doThrow(Throwable... toBeThrown) {
return MOCKITO_CORE.stubber().doThrow(toBeThrown);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With