2017-02-23 40 views
1

我遇到了這個問題「您還沒有配置MockMVC實例。」 「mvn clean install」時出現異常。春天雲合同:生成的測試沒有配置MockMVC,編譯失敗

運行

org.springframework.cloud.contract.verifier.tests.ContractVerifierTest 測試運行:1,失敗:0,錯誤:1,跳過:0,經過時間:0.185秒< < <失敗! - org.springframework.cloud.contract.verifier.tests.ContractVerifierTest validate_shouldGetAmenities(org.springframework.cloud.contract.verifier.tests.ContractVerifierTest)已用時間:0.184秒< < <錯誤! java.lang.IllegalStateException:您尚未配置MockMVC實例。您可以靜態執行此操作

或使用DSL:

given()。 mockMvc(..)。 ..

事情是,引發此異常的測試是基於合同生成的測試。

這是合同。

package contracts 

org.springframework.cloud.contract.spec.Contract.make { 
    request { 
     method 'GET' 
     url '/abc/def/serviceA?catalog=x' 
     body("") 
    } 
    response { 
     status 200 
     body("" 
     ) 
     headers { 
      contentType(applicationJsonUtf8()) 
     } 
    } 
} 

這裏是生成的測試。

package org.springframework.cloud.contract.verifier.tests; 

public class ContractVerifierTest { 

@Test 
public void validate_shouldGetMyStuff() throws Exception { 
     // given: 
     MockMvcRequestSpecification request = given() 
       .body("\"\""); 

     // when: 
      ResponseOptions response = given().spec(request) 
       .get("/abc/def/serviceA?catalog=x"); 

     // then: 
      assertThat(response.statusCode()).isEqualTo(200); 
      assertThat(response.header("Content-Type")).matches("application/json;charset=UTF-8.*"); 
     // and: 
      String responseBody = response.getBody().asString(); 
      assertThat(responseBody).isEqualTo(""); 
    } 

} 

很明顯,MockMVC實例沒有在生成的測試中啓動。異常消息中的建議是在測試中啓動它。但是,它是生成的測試(在「目標」文件夾下)。無論我在那裏添加什麼,它都會在「mvn clean install」後被清除。

有沒有人遇到過這個?我的合同是錯的嗎?這就是爲什麼它沒有得到生成的測試中生成的MockMVC開始部分?

另一個值得關注的是合同中的URL是一個簡單的get。它確實以Json格式返回消息。但現在,我只想通過僅驗證狀態碼200而不檢查消息來使其變得非常簡單。

關於這個URL的另一件事是,我試圖在郵遞員這個網址,並得到響應。我認爲這應該是我在合同中使用的網址。這個假設是錯誤的嗎?我需要以不同的方式在合同中形成此網址嗎?

另外,在郵遞員當我要求這個'GET'與這個URL,我沒有任何東西在「身體」。這就是爲什麼我將合同留在空(「」)的原因。這是正確的做法嗎?這可能會影響生成的測試嗎?

任何提示將不勝感激。

at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSenderImpl.performRequest(MockMvcRequestSenderImpl.java:101) 
at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSenderImpl.sendRequest(MockMvcRequestSenderImpl.java:296) 
at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSenderImpl.get(MockMvcRequestSenderImpl.java:367) 
at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSenderImpl.get(MockMvcRequestSenderImpl.java:47) 
at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSpecificationImpl.get(MockMvcRequestSpecificationImpl.java:565) 
at com.jayway.restassured.module.mockmvc.internal.MockMvcRequestSpecificationImpl.get(MockMvcRequestSpecificationImpl.java:42) 
at 
    org.springframework.cloud.contract.verifier.tests.ContractVerifierTest.validate_shouldGetAmenities(ContractVerifierTest.java:23) 
+0

「given()。mockMvc(..)。..」之後的stacktrace被插入到帖子的末尾。不知何故,我無法將它插入中間。 – Eric

回答

1

事實證明,我需要在示例中添加缺少的基類(如FraudBase.java)。這就是MockMvc被實例化的地方。

+1

我很確定它在文檔中寫了幾次,你需要一個基類。 –

+0

是的,我認爲這不是強制性的,但我錯了。 :) – Eric

+0

它是強制性的 - 沒有這個我們將無法設置mock mvc上下文 –

相關問題