java - 如何拦截放心响应验证失败
问题描述
放心,当我们这样做时
given().get("/api").then().statusCode(SC_OK).content(JSON);
抛出的错误总是顺序的,即如果状态码失败,它不会检查 contentType 是否为 JSON。
此外,抛出的错误总是, AssertionError (Expected : 200, Actual : 404) 无法从中理解,实际响应是什么,如果我们启用日志记录,它将打印在 STDOUT 上,但它不可用另一种方式。
有什么方法可以构建或设置类似我们如何实现的东西Filter
,我们可以在请求构建时提供以在实际调用之前拦截设置
我有一个 rest api 框架,其中大多数验证都是使用ValidatableResponse
ie完成.then()...;
的,而不是通过在请求构建时创建响应的期望。
我希望截获特定类型的失败,即如果状态码失败是 50_ 而我们预期为 200 或其他任何内容,以便可以在测试失败原因中发布实际失败
我确实提出了 github 问题
但我不确定这是否会很快实施。我也无法在文档中找到任何内容。
解决方案
我能够通过委托Response
和ValidatableResponse
接口实现来实现这一点
基本上
public class DelegateResponse implements Response {
Response response;
DelegateResponse(Response response){
this.response = response;
}
.
.
.
// Override and delegate other functions normally, but in the below call, delegate further
@Override
ValidatableResponse then(){
return new DelegateValidatableResponse(response.then(), response);
}
}
public class DelegateValidatableResponse implements ValidatableResponse {
ValidatableResponse validatableResponse;
Response response;
DelegateValidatableResponse(ValidatableResponse validatableResponse,Response response) {
this.validatableResponse = validatableResponse;
this.response = response;
}
.
.
.
// Override and delegate other functions similarly and wrap with try catch
// This gives us access to Response object if an exception is thrown and we have more details
// than just the String "Expected status code 200 but was 500"
@Override
public ValidatableResponse statusCode(Matcher<? super Integer> expectedStatusCode) {
try {
return validatableResponse.statusCode(expectedStatusCode);
} catch (Throwable exception) {
throw new ApiValidationError(response, requestSpec, responseSpec, exception);
}
}
}
推荐阅读
- python-3.x - 如何使用 Pandas groupby() 将具有逗号分隔的列项的字符串聚合到列表中?
- html - Flexbox - 导航栏上菜单项之间的间隙不一致
- python - Azure API 权限修复
- react-redux - 在 React Redux 中拖放一行后更新 react-table 值
- c - 将指针传递给另一个函数时,带有数组的 printf 的奇怪行为
- c# - 以更好的方式在.net core web api中上传图像
- sql-server - 基于 Rowversion 的 SSIS ETL Pattern 偶尔会丢失行,如何纠正?
- java - 使用 Wiremock 进行 Azure 触发函数集成测试
- snakemake - 多个目录中的 Snakemake 文件
- scala - 加特林坡道用户和活跃用户