微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Cloud Contract、body 和 execute 方法未验证响应

如何解决Spring Cloud Contract、body 和 execute 方法未验证响应

我有以下 Spring Cloud 合同:

package contracts.teams

import org.springframework.cloud.contract.spec.Contract

Contract.make {
    name"d Find team roles by filters"
    description "Find team roles by filters"

    request {
        method "POST"
        url "api/team/findTeamRolesByFilters"
        headers {
            contentType applicationjson()
            accept applicationjson()
            header"Authorization",execute('bearerOfAccesstoken()')
        }
        body execute('getRequestForFindTeamRolesByFilters()')
    }

    response {
        status OK()
        headers {
            contentType applicationjson()
        }
        body execute('getResponseForFindTeamRolesByFilters()')
    }
}

我在响应中调用 getResponseForFindTeamRolesByFilters() 以便从服务器生成动态响应。例如,原因可能是来自数据库自动生成的 id。 从 getResponseForFindTeamRolesByFilters() 生成的字符串是一个有效的 JSON,不幸的是它被忽略并在测试运行时始终返回 true。

当我用如下所示的静态响应替换 execute 方法时,我注意到了这一点:

"""
{
   "success": "false"
}
"""

在这种情况下,响应被正确验证,如果不匹配则测试失败。 我所说的得到了测试生成代码的确认,如下所示:

// then:
            assertthat(response.statusCode()).isEqualTo(200);
            assertthat(response.header("Content-Type")).matches("application/json.*");

        // and:
            DocumentContext parsedJson = JsonPath.parse(response.getBody().asstring());
            getResponseForFindTeamRolesByFilters();

如您所见,没有断言。它只是调用生成 json 的方法

我应该如何让测试检查动态 json 响应? 谢谢!

解决方法

我在响应中调用 getResponseForFindTeamRolesByFilters() 以便从服务器生成动态响应。

你不应该这样做。合同测试不应访问数据库。

为了消费者,你应该这样做

request {
        method "POST"
        url "api/team/findTeamRolesByFilters"
        headers {
            contentType applicationJson()
            accept applicationJson()
            header"Authorization",execute('bearerOfAccessToken()')
        }
        body $(producer(execute('getRequestForFindTeamRolesByFilters()')),consumer("some value to be put on the consumer side"))
    }

对于制作人

response {
    status OK()
    headers {
        contentType applicationJson()
    }
    body $(producer(execute('getResponseForFindTeamRolesByFilters()')),consumer("something in the stub"))
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。