With reference to thread (Spring Cloud Contract with Jersey), I was trying to contract test my Jersey controller. Unfortunately the maven plugin generates tests that doesn't compile.
My pom has plugin as below
<plugin>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-contract-maven-plugin</artifactId>
<version>2.2.1.RELEASE</version>
<configuration>
<baseClassForTests>com.ing.api.orderapi.contractverifier.ContractVerifierBaseClass</baseClassForTests>
<testFramework>JUNIT5</testFramework>
<testMode>JAXRSCLIENT</testMode>
</configuration>
</plugin>
And the generated test is
@SuppressWarnings("rawtypes")
public class ContractVerifierTest extends ContractVerifierBaseClass {
@Test
public void validate_get_products() throws Exception {
// when:
Response response = webTarget
.path("/products")
.request()
.build("GET")
.invoke();
// then:
assertThat(response.getStatus()).isEqualTo(200);
}
}
The webTarget in the test cannot be resolved. Kindly advice.
Please check this sample https://github.com/spring-cloud-samples/spring-cloud-contract-samples/tree/master/producer_jaxrs
The code doesn't compile because you haven't defined the webtarget. Example
package com.example;
import java.net.URI;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.UriBuilder;
import com.example.beerapiproducerjaxrs.FraudDetectionController;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.glassfish.jersey.client.ClientConfig;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import static org.springframework.util.SocketUtils.findAvailableTcpPort;
/**
* Example of using pure Jersey / Jetty API / no Spring to setup the tests.
*/
public class BeerRestBase {
public static WebTarget webTarget;
private static Server server;
private static Client client;
@BeforeClass
public static void setupTest() throws Exception {
int port = findAvailableTcpPort(10000);
URI baseUri = UriBuilder.fromUri("http://localhost").port(port).build();
// Create Server
server = new Server(port);
// Configure ServletContextHandler
ServletContextHandler context = new ServletContextHandler(
ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
// Create Servlet Container
ServletHolder jerseyServlet = context
.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
jerseyServlet.setInitOrder(0);
// Tells the Jersey Servlet which REST service/class to load.
jerseyServlet.setInitParameter("jersey.config.server.provider.classnames",
FraudDetectionController.class.getCanonicalName());
// Start the server
server.start();
ClientConfig clientConfig = new ClientConfig();
client = ClientBuilder.newClient(clientConfig);
webTarget = client.target(baseUri);
try {
server.start();
}
catch (Exception ex) {
throw new IllegalStateException(ex);
}
}
@AfterClass
public static void cleanupTest() {
if (client != null) {
client.close();
}
if (server != null) {
try {
server.stop();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
}