在测试执行期间无法连接到本地主机

问题描述:

我正在测试spring-boot应用程序并希望检查简单的获取请求。事情是,如果我用我们的开发服务器替换本地主机一切正常。 但与localhost不同。在测试执行期间无法连接到本地主机

这是父测试类:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = MyServiceStarter.class) 
public abstract class AbstractModulIntegrationTest { ... } 

问题:

@Test 
    public void testGetRequest() { 
     CredentialsProvider provider = new BasicCredentialsProvider(); 
     UsernamePasswordCredentials credentials 
       = new UsernamePasswordCredentials("user", "pass"); 
     provider.setCredentials(AuthScope.ANY, credentials); 

     HttpClient httpClient = HttpClientBuilder.create() 
       .setDefaultCredentialsProvider(provider) 
       .build(); 

     HttpGet request = new HttpGet("http://localhost:9000/abc/v1/users/001"); 
     HttpResponse response = null; 
     try { 
      response = httpClient.execute(request); //HERE IT FAILS 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     System.out.println("RETURN CODE:" + response.getStatusLine().getStatusCode()); 
    } 

Stracktrace:

org.apache.http.conn.HttpHostConnectException: Connect to localhost:9000 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: connect 
    at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:159) 
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:359) 
    at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:381) 
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:237) 
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:185) 
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89) 
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:111) 
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:108) 
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:56) 
    ... 
Caused by: java.net.ConnectException: Connection refused: connect 

任何帮助表示赞赏。

+0

您的本地服务器是否在端口9000上侦听?尝试使用网络浏览器或telnet进行检查。 –

+0

是的。它在端口9000 – IKo

+0

和一个标准的程序可以连接到它? –

@SpringBootTest默认情况下不会启动Web服务器。你可以问它使用webEnvironment属性

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = MyServiceStarter.class, webEnvironment = RANDOM_PORT) 
public abstract class AbstractModulIntegrationTest { ... } 

开始定义的端口或随机端口上,你可以注入服务器的实际端口在您的测试如下:

@LocalServerPort 
private int port; 

public void testGetRequest() { ... } 

如果你想要开始定义的端口,您可能已将您的应用程序配置为从端口9000开始(server.port=9000)。那么您应该这样做:

@RunWith(SpringRunner.class) 
@SpringBootTest(classes = MyServiceStarter.class, webEnvironment = DEFINED_PORT) 
public abstract class AbstractModulIntegrationTest { ... }