[英]Spring-cloud-contract testing doesn't work for JAXRSCLIENT
With reference to thread ( Spring Cloud Contract with Jersey ), I was trying to contract test my Jersey controller.参考线程( 与 Jersey 的 Spring Cloud Contract ),我试图对我的 Jersey 控制器进行合同测试。 Unfortunately the maven plugin generates tests that doesn't compile.
不幸的是,maven 插件会生成无法编译的测试。
My pom has plugin as below我的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>
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.测试中的webTarget无法解析。 Kindly advice.
友善的建议。
Please check this sample https://github.com/spring-cloud-samples/spring-cloud-contract-samples/tree/master/producer_jaxrs请检查此示例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.代码无法编译,因为您尚未定义 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();
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.