7

我遇到了这个“你还没有配置 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:

给定()。模拟MVC(..)。..

问题是,抛出此异常的测试是基于合约生成的测试。

这是合同。

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 是一个简单的获取。它确实返回 Json 格式的消息。但是现在,我只想通过仅验证状态码 200 而不检查消息来使其非常简单。

关于这个 URL 的另一件事是我在邮递员中尝试了这个 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)
4

1 回答 1

7

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

于 2017-02-28T00:15:43.470 回答