java - 用 mockito 模拟 Unirest
问题描述
我正处于开始编程阶段,我想询问有关使用 Mockito 模拟对象的问题,更具体地说是 Unirest 的响应。假设我有一个数据库,每次进行测试时我都不想打扰它,我想为此使用 Mockito,但问题是我不确定如何创建会返回的假“httpResponse”对象. 为了提供一些上下文,我附上了我的代码:
/**
* This method lists the ID of the activity when requested.
*
* @return the list of all activities
*/
public JSONArray getActivites() {
HttpResponse<JsonNode> jsonResponse = null;
try {
jsonResponse = Unirest
.get("http://111.111.111.111:8080/activity")
.header("accept", "application/json")
.asJson();
} catch (UnirestException e) {
System.out.println("Server is unreachable");
}
JSONArray listOfActivities = jsonResponse.getBody().getArray();
return listOfActivities;
}
所以我的想法是模拟 Unirest,然后当一个 .get 方法被调用时,我会返回一个假的 HttpResponse,问题是,我不知道怎么做,我在网上看了,并不能真正赚到感觉。是否可以使用实际数据库执行 1 次,然后“提取”信息并每次都使用该信息进行测试?
解决方案
使用 PowerMockRunner、PowerMockito 和 Mockito 的示例片段
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Unirest.class})
public class TestApp{
@Before
public void setup() {
PowerMockito.mockStatic(Unirest.class);
}
@Test
public void shouldTestgetActivites() throws UnirestException {
when(Unirest.get(Client.DEFAULT_BASE_URL)).thenReturn(getRequest);
when(getRequest.asJson()).thenReturn(httpResponse);
when(httpResponse.getStatus()).thenReturn(Integer.valueOf(200));
assertThat(something).isEqualTo(true);
}
}
推荐阅读
- asp.net - 无法在 WebApi GET 中添加自定义标题文本
- c# - 使用命名空间时 C# 编译的内容
- powershell - 使用 powershell 按主题搜索电子邮件
- sql - SQLite strftime() 返回 null 和整数
- java - 带有 RestController 的 Spring IntegrationFlow
- reactjs - 当服务器关闭时 React-Apollo 捕获
- r - 使用部分匹配重命名数据框列名
- amazon-web-services - PowerShell 和命令提示符为 --exclude 和 --include (AWS) 返回未知选项错误
- vue.js - 如何将多个vue文件作为一个导入
- python - python赋值和逻辑运算符问题