I'm trying to assert the rest client exception. My piece of code is as follows:
public class SomeClass {
public SomeResponse postMessage() {
SomeBean requestObject = new SomeBean();
SomeResponse response = null;
try{
response = restTemaple.postForEntity("http://someUrl", requestObject, SomeResponse.class);
} catch(RestTemplateException e) {
Sysout("Rest Template Exception!");
}
return response;
}
}
My Test case is as follows:
@RunWith(MockitoJUnitRunner.class)
@ActiveProfiles("test")
@PropertySource("classpath:application-test.properties")
public class testClass {
@InjectMocks
SomeClass service;
@Mock
RestTempalte restTemplate;
@Test (expected = RestTemplateException.class)
public void myTest() {
Mockito.when(
restTemplate.postForEntity(Mockito.anyString(), Mockito.any(SomeBean.class), Mockito.any()))
.thenThrow(new RestClientException(null));
service.postMessage();
}
}
I'm getting a Junit assertion Error. Kindly find the stackTrace below:
java.lang.AssertionError: Expected exception: org.springframework.web.client.RestClientException
at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:32)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.mockito.internal.runners.DefaultInternalRunner$1.run(DefaultInternalRunner.java:79)
at org.mockito.internal.runners.DefaultInternalRunner.run(DefaultInternalRunner.java:85)
at org.mockito.internal.runners.StrictRunner.run(StrictRunner.java:39)
at org.mockito.junit.MockitoJUnitRunner.run(MockitoJUnitRunner.java:163)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Kindly me on this. How can i throw and assert the rest client exception here?
You're catching the exception into postMessage without rethrowing the exception. If you handle the exception into postMessage, you do not have to test if the method execution will throw a RestClientException , as it's handled there. If you wait for your method to throw this exception, do not catch it and simply use throws RestClientException in your method declaration
public class SomeClass {
public void postMessage() throws RestClientException {
SomeBean requestObject = new SomeBean();
return restTemaple.postForEntity("http://someUrl", requestObject, SomeResponse.class);
}
}
Then you do not call postMessage in your unit test. You're just giving the instruction to your mock on how to react when RestTempalte.postForEntity is called.
@Test (expected = RestClientException.class)
public void myTest() {
Mockito.when(
restTemplate.postForEntity(Mockito.anyString(), Mockito.any(SomeBean.class), Mockito.any()))
.thenThrow(new RestClientException(null));
service.postMessage(); // something like that needed here
}
It's also weird that you return something in postMessage as the return type of the method is void
public SomeResponse postMessage() throws RestClientException {
SomeBean requestObject = new SomeBean();
return restTemaple.postForEntity("http://someUrl", requestObject, SomeResponse.class);
}
Looks better
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