【问题标题】:How to pass two different type of param in mockito如何在 mockito 中传递两种不同类型的参数
【发布时间】:2020-02-27 11:24:01
【问题描述】:

我正在做非常简单的事情,但面临一些问题。 所以写了一个非常简单的方法,它采用一个 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"

我试过了,但它抛出了异常。 有人可以帮我解决这个问题。

谢谢

【问题讨论】:

    标签: java json mockito


    【解决方案1】:

    如果您将ArgumentMatchers 用于其中一个参数,则必须将其用于所有参数。在这种情况下,请使用ArgumentMatchers.eq("a") 而不是"a"

    when(jsonLinkExtractorService.getJsonArray(any(), eq("a"))).thenReturn(jsonArray);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2018-09-08
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多