2014-10-17 144 views
1

我爲我的彈簧引導應用程序編寫集成測試,它顯示爲以下代碼。它可以在Eclipse IDE中以Junit測試的方式運行,嵌入式tomcat自動啓動和關閉。但是當我使用Maven安裝運行它時,僅僅因爲嵌入式tomcat未啓動而失敗。我需要在Maven中進行更多配置嗎?怎麼做?使用Maven測試運行彈簧引導集成測試,但嵌入式tomcat未啓動

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = TestCoreConfig.class) 
@WebAppConfiguration 
@IntegrationTest 
public class UserRegistrationTest { 

@Autowired 
private Receiver receiver; 


@Test 
public void shouldRegisterUser() { 
    //Given 
    String email = System.currentTimeMillis() + "[email protected]"; 

    //When 
    ResponseEntity<UserInfo> entity = registerUser(email); 

    //Then 
    assertEquals(HttpStatus.OK, entity.getStatusCode()); 

    UserInfo registeredUser = entity.getBody(); 
    System.out.println ("The registered user ID is " + registeredUser.getUserId()); 

    String receivedMessages = receiver.getMessages().toString(); 
    assertTrue(receivedMessages + " expected to contain " + email, receivedMessages.indexOf(email) != -1); 
} 

private ResponseEntity<UserInfo> registerUser(String email) { 
    String password = "secret"; 
    UserInfo userInfo = new UserInfo(email, password); 

    RestTemplate restTemplate = new RestTemplate(); 
    return restTemplate.postForEntity("http://localhost:8080/users/registration", userInfo, UserInfo.class); 
} 
} 

http://maven.apache.org/xsd/maven-4.0.0.xsd「> 4.0.0

<groupId>com.wangjun</groupId> 
<artifactId>userRegistration-microservice</artifactId> 
<version>0.0.1-SNAPSHOT</version> 
<packaging>jar</packaging> 

<name>userRegistration-microservice</name> 
<description>UserRegistration microservice</description> 

<parent> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-starter-parent</artifactId> 
    <version>1.1.6.RELEASE</version> 
    <relativePath/> <!-- lookup parent from repository --> 
</parent> 

<dependencies> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-amqp</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-actuator</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-web</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-mongodb</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.hateoas</groupId> 
     <artifactId>spring-hateoas</artifactId> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-test</artifactId> 
     <scope>test</scope> 
    </dependency> 
    <dependency> 
     <groupId>com.jayway.jsonpath</groupId> 
     <artifactId>json-path</artifactId> 
     <scope>test</scope> 
    </dependency> 
</dependencies> 

<properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <start-class>com.wangjun.microservices.userregistration.Application</start-class> 
    <java.version>1.7</java.version> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
     </plugin> 
    </plugins> 
</build> 

sshouldRegisterUser(com.wangjun.microservices.userregistration.rest.functional.UserRegistrationTest) Time elapsed: 1.031 sec <<< ERROR! org.springframework.web.client.ResourceAccessException: I/O error on POST request for  :Connection refused: connect; nested exception is 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:339) 
     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
     at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
     at java.net.Socket.connect(Socket.java:579) 
     at java.net.Socket.connect(Socket.java:528) 
     at sun.net.NetworkClient.doConnect(NetworkClient.java:180) 
     at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) 
     at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) 
     at sun.net.www.http.HttpClient.<init>(HttpClient.java:211) 
     at sun.net.www.http.HttpClient.New(HttpClient.java:308) 
     at sun.net.www.http.HttpClient.New(HttpClient.java:326) 
     at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:996) 
     at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:932) 
     at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:850) 
     at org.springframework.http.client.SimpleBufferingClientHttpRequest.executeInternal(SimpleBufferingClientHttpReq uest.java:78) 
     at org.springframework.http.client.AbstractBufferingClientHttpRequest.executeInternal(AbstractBufferingClientHtt pRequest.java:48) 
     at org.springframework.http.client.AbstractClientHttpRequest.execute(AbstractClientHttpRequest.java:52) 
     at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:551) 
     at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:512) 
     at org.springframework.web.client.RestTemplate.postForEntity(RestTemplate.java:363) 
     at com.wangjun.microservices.userregistration.rest.functional.UserRegistrationTest.registerUser(UserRegistration Test.java:91) 
     at com.wangjun.microservices.userregistration.rest.functional.UserRegistrationTest.shouldRegisterUser(UserRegistrationTest.java:37) 
+1

看起來也許Tomcat是不是在運行時類路徑與Maven的測試。任何想法爲什麼?你有沒有給他們特殊待遇? – 2014-10-17 21:24:17

+0

我在這裏複製maven文件。我是Spring引導的初學者。我應該在maven文件中配置嵌入式tomcat服務器嗎?怎麼做?我沒有在我的機器上安裝tomcat。它似乎不配置tomcat如果使用gradle,任何想法?謝謝。 – 2014-10-20 03:35:35

+0

看起來不錯。也許你有港口衝突?是否有任何東西與您的應用在同一個端口上運行(默認爲8080)? – 2014-10-20 05:39:11

回答

9

掃描端口,將服務器端口設置爲空閒狀態發現

@IntegrationTest("server.port:0")

發現的端口號

@Value("${local.server.port}") 
int port; 

添加端口,URL

restTemplate.postForEntity("http://localhost:"+port+"https://stackoverflow.com/users/registration"... 
+1

這應該被標記爲正確的答案。爲我完美工作。謝謝@Miodigy – user1567291 2016-04-12 00:01:57

+0

應該標記爲正確答案。這對我有效。 – 2017-03-23 09:48:49

相關問題