Spring boot Spring boot集成测试JAX-RS资源
我正在使用SpringBoot2.0.3.RELEASE并创建一个简单的Jersey JAX-RS资源(使用Jersey SpringBootStarter)。我想使用我编写的Jersey客户机类做一个简单的集成测试,但是当我得到一个Spring boot Spring boot集成测试JAX-RS资源,spring-boot,jax-rs,integration-testing,jersey-2.0,jersey-client,Spring Boot,Jax Rs,Integration Testing,Jersey 2.0,Jersey Client,我正在使用SpringBoot2.0.3.RELEASE并创建一个简单的Jersey JAX-RS资源(使用Jersey SpringBootStarter)。我想使用我编写的Jersey客户机类做一个简单的集成测试,但是当我得到一个java.net.ConnectException:Connection-densed 我们开始吧,首先是简单的资源 @Component @Path(Constants.STATUS_PATH) public class StatusResource {
java.net.ConnectException:Connection-densed
我们开始吧,首先是简单的资源
@Component
@Path(Constants.STATUS_PATH)
public class StatusResource {
private static final String OK = "OK";
@GET
@Produces(MediaType.TEXT_PLAIN)
public Response getStatus() {
return Response.ok(OK).build();
}
}
泽西配置
@Component
public class JerseyConfig extends ResourceConfig {
private static final Logger logger = LoggerFactory.getLogger(JerseyConfig.class);
public JerseyConfig() {
logger.debug("Registering JAX-RS resources");
register(StatusResource.class);
}
}
Spring启动应用程序类
@SpringBootApplication
public class Application {
private static final Logger logger = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
logger.info("==== Starting Services ====");
SpringApplication.run(Application.class, args);
}
}
泽西岛客户
public class ServicesClient {
private static final Logger logger = LoggerFactory.getLogger(ServicesClient.class);
private Client client;
public ServicesClient() {
client = initJerseyClient();
}
private Client initJerseyClient() {
logger.debug("Initialising Jersey Client");
ClientConfig jerseyClientConfig = new ClientConfig();
return ClientBuilder.newClient(jerseyClientConfig);
}
/**
* Returns OK if services are running
*
* @return service status
*/
public String getServicesStatus() {
logger.debug("Client get services status request");
Response respone = client.target("http://localhost:8080").path(Constants.STATUS_PATH).request().get();
return respone.readEntity(String.class);
}
}
最后是Spring Boot集成测试
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = Application.class)
public class StatusResourceTest {
private static Logger logger = LoggerFactory.getLogger(StatusResourceTest.class);
private static ServicesClient servicesClient;
@BeforeAll
public static void setup() throws IOException {
logger.debug("--- Starting StatusResourceTest setup ---");
System.setProperty("services.client.file", "classpath:com/zurich/utils/services/config/services.yaml");
servicesClient = new ServicesClientBuilder().build();
}
@Test
public void testGetStatus() {
logger.debug("--- Starting testGetStatus ---");
String status = servicesClient.getServicesStatus();
assertThat("Service status should be OK", status, equalTo("OK"));
}
}
正如我所说,当测试运行并在客户机内部调用get时,我会得到以下堆栈跟踪。这对我来说意味着资源没有在http://localhost:8080
但我不知道为什么
javax.ws.rs.ProcessingException: java.net.ConnectException: Connection refused: connect
at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:284)
at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:278)
at org.glassfish.jersey.client.JerseyInvocation.lambda$invoke$0(JerseyInvocation.java:753)
at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
at org.glassfish.jersey.internal.Errors.process(Errors.java:229)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:414)
at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:752)
at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:419)
at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:319)
at com.xxx.utils.services.client.ServicesClient.getServicesStatus(ServicesClient.java:178)
at sit.resource.status.StatusResourceTest.testGetStatus(StatusResourceTest.java:39)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480)
at org.glassfish.jersey.client.internal.HttpUrlConnector._apply(HttpUrlConnector.java:390)
at org.glassfish.jersey.client.internal.HttpUrlConnector.apply(HttpUrlConnector.java:282)
... 11 more
似乎问题出在
@springbootest
注释上,我将其更改为以下内容,现在可以正常工作了
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.DEFINED_PORT)
似乎问题出在
@springbootest
注释上,我将其更改为以下内容,现在可以正常工作了
@SpringBootTest(classes = Application.class, webEnvironment = WebEnvironment.DEFINED_PORT)