java - 如何在 mockito 中传递两种不同类型的参数
问题描述
我正在做非常简单的事情,但面临一些问题。所以写了一个非常简单的方法,它采用一个 JsonObject 并根据密钥提取 JsonArry。它工作正常,但是当我尝试编写单元测试时遇到问题。所以以下是需要测试的方法。
public String getA(JSONObject jsonObject) {
JSONArray educationsArray = jsonService.getJsonArray(jsonObject, "a");
}
public String getB(JSONObject jsonObject) {
JSONArray educationsArray = jsonService.getJsonArray(jsonObject, "b");
}
这是我正在尝试编写的单元测试。
String json = fileUtil.readFile("data.json");
String content = (String) new JSONObject(json).get("data");
JSONObject contentJson = new JSONObject(content);
when(jsonLinkExtractorService.getJsonArray(contentJson, "a")).thenReturn(jsonArray);
它读取数据的 json 文件,提取元素的数据类型,该元素再次 json 有效负载,然后最后使用提取的字符串创建新的 JSONObject。完成所有这些后,对新创建的 json 对象进行了简单的模拟并传递了密钥。
不是在实际调用方法时返回null。可能的原因是对象 JsonObject 与 Mockito 不同,这就是为什么无法匹配的原因。当我将这两个参数更改为 any(), any() 然后它可以找到但它没有按键过滤。所以有人可以帮助我吗? Mockito 可以匹配两个新创建的对象,或者我可以像下面的语句一样模拟。
any(), "a"
我试过但它抛出异常。有人可以帮我解决这个问题。
谢谢
解决方案
如果ArgumentMatchers
将参数用于其中一个,则必须将其用于所有参数。在这种情况下,使用ArgumentMatchers.eq("a")
代替"a"
:
when(jsonLinkExtractorService.getJsonArray(any(), eq("a"))).thenReturn(jsonArray);
推荐阅读
- bash - 从终端打开 Firefox-bin 文件时打印 Firefox 日志消息?
- angular - 如何在 Angular 7 中使用 keycloak 时保持会话活跃?
- vue.js - 如果 URL 端点有句点 (.) 则无法访问 vuejs 路由
- django - django rest框架无法从字符串值序列化外键字段
- python - 在 python 中使用 Tkinter 在井字游戏中的 minimax 算法有什么问题?
- java - 如何在 RecyclerView 上展示插页式广告,
- azure-cognitive-services - 选择标记识别的 ETA?
- php - Laravel 7单行回显belongsToMany关系
- javascript - 在 Bootstrap 列中强制两个带有图例的 Chart.js 圆环图大小相同
- linux - bash:错误的解释器:权限被拒绝