This is my code:
public void analyze(String url) throws SiteBusinessException { Document doc = null; Response response = null; try { response = Jsoup.connect(url).execute(); doc = Jsoup.connect(url).get(); } catch (IOException e) { LOGGER.warn("Cannot analyze site [url={}, statusCode={}, statusMessage={} ]", new Object[] {url, response.statusCode(), response.statusMessage()}); throw new SiteBusinessException(response.statusMessage(), String.valueOf(response.statusCode())); } }
How can I test this method using PowerMock? I want to write test to check that when invoke .execute() then throw IOException and it catch then throw SiteBusinessException.
My code of test.
@RunWith(PowerMockRunner.class) @PrepareForTest({Jsoup.class}) Test(expected = SiteBusinessException.class) public void shouldThrowIOException() throws Exception { Connection connection = PowerMockito.mock(Connection.class); Response response = PowerMockito.mock(Response.class); PowerMockito.when(connection.execute()).thenReturn(response); PowerMockito.mockStatic(Jsoup.class); expect(Jsoup.connect(SITE_URL)).andReturn(connection); replay(Jsoup.class); PowerMockito.when(Jsoup.connect(SITE_URL).execute()).thenThrow(new IOException()); AnalyzerService sut = new AnalyzerServiceImpl(); sut.analyzeSite(SITE_URL); }
I got
java.lang.Exception: Unexpected exception, expected<com.siteraport.exception.SiteBusinessException> but was<java.lang.IllegalStateException>
??