Spring-云合同测试不适用于 JAXRSCLIENT
Spring-cloud-contract testing doesn't work for JAXRSCLIENT
关于线程 (),我试图对我的 Jersey 控制器进行合同测试。不幸的是,maven 插件生成的测试无法编译。
我的 pom 有如下插件
<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>
生成的测试是
@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);
}
}
测试中的webTarget无法解析。请多多指教。
请检查此样本https://github.com/spring-cloud-samples/spring-cloud-contract-samples/tree/master/producer_jaxrs
代码无法编译,因为您尚未定义 webtarget。示例
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();
}
}
}
}
关于线程 (
我的 pom 有如下插件
<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>
生成的测试是
@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);
}
}
测试中的webTarget无法解析。请多多指教。
请检查此样本https://github.com/spring-cloud-samples/spring-cloud-contract-samples/tree/master/producer_jaxrs
代码无法编译,因为您尚未定义 webtarget。示例
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();
}
}
}
}