java - 来自第三方 API 的模拟调用和响应
问题描述
可以这么说,我正在调用第三方端点。我只是调用端点并解析响应。
public ListUsers listUsers() {
String url = "/api/v1/account/?apikey=" + apiKey;
String signature = null;
try {
signature = generateSignature(url);
} catch (SignatureException e) {
e.printStackTrace();
}
Call newCall = apiCall("GET", url, signature, null);
Type localVarReturnType = new TypeToken<ListUsers>() { }.getType();
ApiResponse<ListUsers> responseFromApiClient = apiClient.execute(newCall, localVarReturnType);
return responseFromApiClient.getData();
}
listUsers() 函数已被重构以获得更好的抽象
public ListUsers listUsers() {
String url = "/api/v1/account/?apikey=" + apiKey;
Type localVarReturnType = new TypeToken<ListUsers>() { }.getType();
ApiResponse<ListUsers> responseFromApiClient = apiClient.execute(buildApiCall("GET", url, null), localVarReturnType);
return responseFromApiClient.getData();
}
这个特定的端点不接受任何主体,并返回我然后解析的 json。
{
"meta": {
"limit": 0,
"offset": 0,
"total_count": 1
},
"objects": [
{
"address_one": "",
"address_three": "",
"address_two": "",
"country_code": "",
"cs_domain_id": null,
"date_joined": "2019-07-05T13:50:21",
"disable_personal_account": false,
"email": "noreply@some.com",
"first_name": "",
"id": 1,
"is_reseller": true,
"is_superuser": true,
"is_verified": true,
"last_login": null,
"last_name": "",
"paywall": true,
"postal_code": "",
"projects": [],
"reference_number": "",
"reseller_id": 1,
"reseller_name": "ROOT",
"reseller_rights": [
{
"domain_id": null,
"id": 1,
"level": "owner",
"name": "ROOT"
}
],
"resource_uri": "/api/v1/account/1/",
"saml": false,
"state": 0,
"status": "enabled",
"surname": "",
"username": "admin",
"uuid": "1c208540-3ed9-4741-a936-a574a3ded12a"
}
]
}
然后解析这个 json 响应。
我如何为此编写适当的单元测试,还是不需要?我想出的唯一测试只是我实际调用服务的基本测试,但至于纯单元测试,它不适用于我的构建服务器。这是测试
@Test
void getListProjectsTest() {
GqConsoleApiClient gcac = new GqConsoleApiClient();
ListProjects response = gcac.listProjects();
System.out.println(listProjects);
Assert.assertEquals(20, response.getMeta().getLimit());
Assert.assertEquals("some-customer-id", response.getObjects().get(0).getCustomerId());
}
解决方案
有多种方法可以做到这一点。如果我是你,我会这样做
首先创建一个具有正确响应的 json 文件
编写一个测试用例,其中
2.1。加载测试类中的json文件
File sampleFile = new File(URLDecoder.decode(classLoader.getResource("jsonFilePath").getFile(), "UTF-8"));
2.2 将此文件转换为Java类型,该类型将从第三方API返回。在您的情况下,它是
ApiResponse<ListUsers>
. 为此,您可以使用 Jackson 或 Gson 库2.3 您应该创建一个 apiClient 类型的模拟并模拟
execute
调用。并返回从步骤 2.2 得到的 java 对象。像这样的东西when(apiClient.execute(any(), any()).thenReturn(....)
2.4 编写断言检查java对象的各个方面
这样您就可以轻松创建多个 json 文件来测试来自 api 的各种响应。
推荐阅读
- c# - 如何在调试时检查配置的映射
- php - 想象一下如何避免半可见文本
- wordpress - 如何在 wordpress 上使这部分动态化
- javascript - 如何在 d3 图表中强制指定特定数量的 y 轴刻度?
- anaconda - 如何查看 Anonda 环境的名称?
- javascript - Jquery:如何为 contenteditable div 创建颜色选择器?
- ios - UIAlertViewConroller 中对 UITextView 的约束
- database - 如何保持不同数据库中的表同步?
- javascript - PHP 禁止从任何移动设备注册,只允许用户从桌面注册
- azure-active-directory - 增量 ARM 模板部署覆盖密钥保管库访问策略中的资源