BAEL-5776 - Mock a URL Connection in Java (#14184)
* BAEL-4706 - Spring Boot with Spring Batch * BAEL-3948 - Fix test(s) in spring-batch which leaves repository.sqlite changed * BAEL-4736 - Convert JSONArray to List of Object using camel-jackson * BAEL-4756 - Mockito MockSettings * BAEL-4756 - Mockito MockSettings - fix spelling * BAEL-2674 - Upgrade the Okhttp article * BAEL-4204 - Adding Interceptors in OkHTTP * BAEL-4836 - Mocking Static Methods with Mockito * BAEL-4205 - A Guide to Events in OkHTTP * BAEL-5408 - Update Camel version in spring-boot-camel module * BAEL-5234 - Apache Camel Routes Testing in Spring Boot * BAEL-5234 - Apache Camel Routes Testing in Spring Boot * BAEL-5237 - Apache Camel Conditional Routing * BAEL-5236 - Apache Camel Exception Handling * BAEL-5890 - Jackson's Deserialization with Lombok * BAEL-5890 - Jackson's Deserialization with Lombok * BAEL-5890 - Jackson's Deserialization with Lombok * BAEL-5890 - Jackson's Deserialization with Lombok * BAEL-5890 - Jackson's Deserialization with Lombok * BAEL-5776 - Mock a URL Connection in Java * BAEL-5776 - Mock a URL Connection in Java --------- Co-authored-by: Jonathan Cook <jcook@sciops.esa.int> Co-authored-by: jcook02 <jonathan.paul.cook@ext.esa.int>
This commit is contained in:
parent
0d8db7af6a
commit
a0d7405115
|
@ -82,8 +82,32 @@
|
||||||
<artifactId>converter-gson</artifactId>
|
<artifactId>converter-gson</artifactId>
|
||||||
<version>${retrofit.version}</version>
|
<version>${retrofit.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.mockito</groupId>
|
||||||
|
<artifactId>mockito-inline</artifactId>
|
||||||
|
<version>${mockito.version}</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.jmockit</groupId>
|
||||||
|
<artifactId>jmockit</artifactId>
|
||||||
|
<version>${jmockit.version}</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<argLine>
|
||||||
|
-javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar
|
||||||
|
</argLine>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<okhttp.version>4.9.1</okhttp.version>
|
<okhttp.version>4.9.1</okhttp.version>
|
||||||
<gson.version>2.8.5</gson.version>
|
<gson.version>2.8.5</gson.version>
|
||||||
|
@ -95,6 +119,7 @@
|
||||||
<spring.webflux.version>5.1.9.RELEASE</spring.webflux.version>
|
<spring.webflux.version>5.1.9.RELEASE</spring.webflux.version>
|
||||||
<reactive.stream.version>1.0.3</reactive.stream.version>
|
<reactive.stream.version>1.0.3</reactive.stream.version>
|
||||||
<reactor.version>3.2.12.RELEASE</reactor.version>
|
<reactor.version>3.2.12.RELEASE</reactor.version>
|
||||||
|
<jmockit.version>1.49</jmockit.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
</project>
|
</project>
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.baeldung.mock.url;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
public class UrlFetcher {
|
||||||
|
|
||||||
|
private URL url;
|
||||||
|
|
||||||
|
public UrlFetcher(URL url) throws IOException {
|
||||||
|
this.url = url;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUrlAvailable() throws IOException {
|
||||||
|
return getResponseCode() == HttpURLConnection.HTTP_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getResponseCode() throws IOException {
|
||||||
|
HttpURLConnection con = (HttpURLConnection) this.url.openConnection();
|
||||||
|
return con.getResponseCode();
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,35 @@
|
||||||
|
package com.baeldung.mock.url;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
public class MockHttpURLConnection extends HttpURLConnection {
|
||||||
|
|
||||||
|
protected MockHttpURLConnection(URL url) {
|
||||||
|
super(url);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getResponseCode() {
|
||||||
|
return responseCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setResponseCode(int responseCode) {
|
||||||
|
this.responseCode = responseCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void disconnect() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean usingProxy() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void connect() throws IOException {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.baeldung.mock.url;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URL;
|
||||||
|
import java.net.URLConnection;
|
||||||
|
import java.net.URLStreamHandler;
|
||||||
|
|
||||||
|
public class MockURLStreamHandler extends URLStreamHandler {
|
||||||
|
|
||||||
|
private MockHttpURLConnection mockHttpURLConnection;
|
||||||
|
|
||||||
|
public MockURLStreamHandler(MockHttpURLConnection mockHttpURLConnection) {
|
||||||
|
this.mockHttpURLConnection = mockHttpURLConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected URLConnection openConnection(URL url) throws IOException {
|
||||||
|
return this.mockHttpURLConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.baeldung.mock.url;
|
||||||
|
|
||||||
|
import java.net.URLStreamHandler;
|
||||||
|
import java.net.URLStreamHandlerFactory;
|
||||||
|
|
||||||
|
public class MockURLStreamHandlerFactory implements URLStreamHandlerFactory {
|
||||||
|
|
||||||
|
private MockHttpURLConnection mockHttpURLConnection;
|
||||||
|
|
||||||
|
public MockURLStreamHandlerFactory(MockHttpURLConnection mockHttpURLConnection) {
|
||||||
|
this.mockHttpURLConnection = mockHttpURLConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public URLStreamHandler createURLStreamHandler(String protocol) {
|
||||||
|
return new MockURLStreamHandler(this.mockHttpURLConnection);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,42 @@
|
||||||
|
package com.baeldung.mock.url;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.extension.ExtendWith;
|
||||||
|
|
||||||
|
import mockit.Expectations;
|
||||||
|
import mockit.Mocked;
|
||||||
|
import mockit.integration.junit5.JMockitExtension;
|
||||||
|
|
||||||
|
|
||||||
|
@ExtendWith(JMockitExtension.class)
|
||||||
|
class UrlFetcherJMockitUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenMockedUrl_whenRequestSent_thenIsUrlAvailableTrue(@Mocked URL anyURL, @Mocked HttpURLConnection mockConn) throws Exception {
|
||||||
|
new Expectations() {{
|
||||||
|
mockConn.getResponseCode();
|
||||||
|
result = HttpURLConnection.HTTP_OK;
|
||||||
|
}};
|
||||||
|
|
||||||
|
UrlFetcher fetcher = new UrlFetcher(new URL("https://www.baeldung.com/"));
|
||||||
|
assertTrue(fetcher.isUrlAvailable(), "Url should be available: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenMockedUrl_whenRequestSent_thenIsUrlAvailableFalse(@Mocked URL anyURL, @Mocked HttpURLConnection mockConn) throws Exception {
|
||||||
|
new Expectations() {{
|
||||||
|
mockConn.getResponseCode();
|
||||||
|
result = HttpURLConnection.HTTP_INTERNAL_ERROR;
|
||||||
|
}};
|
||||||
|
|
||||||
|
UrlFetcher fetcher = new UrlFetcher(new URL("https://www.baeldung.com/"));
|
||||||
|
assertFalse(fetcher.isUrlAvailable(), "Url should NOT be available: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package com.baeldung.mock.url;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class UrlFetcherMockitoUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenMockedUrl_whenRequestSent_thenIsUrlAvailableTrue() throws Exception {
|
||||||
|
HttpURLConnection mockHttpURLConnection = mock(HttpURLConnection.class);
|
||||||
|
when(mockHttpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK);
|
||||||
|
|
||||||
|
URL mockURL = mock(URL.class);
|
||||||
|
when(mockURL.openConnection()).thenReturn(mockHttpURLConnection);
|
||||||
|
|
||||||
|
UrlFetcher fetcher = new UrlFetcher(mockURL);
|
||||||
|
assertTrue(fetcher.isUrlAvailable(), "Url should be available: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenMockedUrl_whenRequestSent_thenIsUrlAvailableFalse() throws Exception {
|
||||||
|
HttpURLConnection mockHttpURLConnection = mock(HttpURLConnection.class);
|
||||||
|
when(mockHttpURLConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_NOT_FOUND);
|
||||||
|
|
||||||
|
URL mockURL = mock(URL.class);
|
||||||
|
when(mockURL.openConnection()).thenReturn(mockHttpURLConnection);
|
||||||
|
|
||||||
|
UrlFetcher fetcher = new UrlFetcher(mockURL);
|
||||||
|
assertFalse(fetcher.isUrlAvailable(), "Url should NOT be available: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,40 @@
|
||||||
|
package com.baeldung.mock.url;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import java.net.HttpURLConnection;
|
||||||
|
import java.net.URL;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.BeforeAll;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class UrlFetcherUnitTest {
|
||||||
|
|
||||||
|
private static MockHttpURLConnection mockHttpURLConnection;
|
||||||
|
|
||||||
|
@BeforeAll
|
||||||
|
public static void setUp() {
|
||||||
|
mockHttpURLConnection = new MockHttpURLConnection(null);
|
||||||
|
URL.setURLStreamHandlerFactory(new MockURLStreamHandlerFactory(mockHttpURLConnection));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenMockedUrl_whenRequestSent_thenIsUrlAvailableTrue() throws Exception {
|
||||||
|
mockHttpURLConnection.setResponseCode(HttpURLConnection.HTTP_OK);
|
||||||
|
URL url = new URL("https://www.baeldung.com/");
|
||||||
|
|
||||||
|
UrlFetcher fetcher = new UrlFetcher(url);
|
||||||
|
assertTrue(fetcher.isUrlAvailable(), "Url should be available: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenMockedUrl_whenRequestSent_thenIsUrlAvailableFalse() throws Exception {
|
||||||
|
mockHttpURLConnection.setResponseCode(HttpURLConnection.HTTP_FORBIDDEN);
|
||||||
|
URL url = new URL("https://www.baeldung.com/");
|
||||||
|
|
||||||
|
UrlFetcher fetcher = new UrlFetcher(url);
|
||||||
|
assertFalse(fetcher.isUrlAvailable(), "Url should NOT be available: ");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue