Spring云合约:生成的测试没有配置MockMVC并且编译失败

时间:2017-02-23 02:28:39

标签: spring-cloud spring-cloud-contract

我遇到了这个"你还没有配置MockMVC实例。" " mvn clean install"时的异常。

正在运行

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:

给出()。         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实例未在生成的测试中启动。异常消息中的建议是在测试中启动它。但是,它是一个生成的测试(在" target"文件夹下)。我在那里添加的内容并不重要,它会在" mvn clean install"之后被删除。

有没有人碰到这个?我的合同错了吗?这就是为什么它没有在生成的测试中生成MockMVC启动部分?

另一个问题是合同中的URL是一个简单的获取。它确实以Json格式返回消息。但就目前而言,我只想通过仅在不检查消息的情况下验证状态代码200来使其变得非常简单。

关于这个URL的另一件事是我在postman中尝试了这个url并获得了响应。我认为这应该是我在合同中使用的网址。这个假设是错的吗?我是否需要以不同的方式在合同中形成此网址?

另外,邮递员在我要求这样做的时候“GET'有了这个网址,我身上没有任何东西"。这就是我离开" body"在合同中为空("")。这是正确的做法吗?这会影响生成的测试吗?

任何提示都将受到赞赏。

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)

1 个答案:

答案 0 :(得分:4)

事实证明,我需要在示例中添加我缺少的基类(如FraudBase.java)。那是MockMvc实例化的地方。