Mockito Java 8参数匹配任意(Class <t>)

时间:2018-01-25 05:31:01

标签: java mocking mockito

我需要将Class传递给参数匹配器。这是我正在做的事情,我的匹配应该返回对象apiResponse,它不是null,因为我正在创建它并传递它。但是,它似乎并没有注入它;我收到它为null。

我也尝试过ArgumentMatchers.eq(ApiResponse.class),Mockito.eq(ApiResponse.class),ArgumentMatchers.any(ApiResponse.class)和Mockito.any(ApiResponse.class)。

使用ArgumentMatchers.any(ApiResponse.class)和Mockito.any(ApiResponse.class),代码甚至无法编译,并且使用ArgumentMatchers.eq(ApiResponse.class),Mockito.eq(ApiResponse.class) ),我在另一边收到null。请提出建议!

      ApiResponse apiResponse = new ApiResponse();
      apiResponse.setErrcode("0");
      apiResponse.setNum_fields_changed("1");
      Mockito.when(xmlResponseMapper.parseXMLToObject(any(String.class),ArgumentMatchers.eq(ApiResponse.class))).thenReturn((apiResponse));

这是我在课堂上使用此匹配器的地方

  apiResponse = xmlResponseMapper.parseXMLToObject(response.getBody(), ApiResponse.class);

我做错了什么吗?我使用的是Java 8。

2 个答案:

答案 0 :(得分:1)

它解决了。问题实际上不是ArgumentMatchers.eq(ApiResponse.class),而是使用String,匹配器中传递的第一个参数

  Mockito.when(xmlResponseMapper.parseXMLToObject(any(String.class),ArgumentMatchers.eq(ApiResponse.class))).thenReturn((apiResponse));

我将null作为第一个参数传递。一旦我通过了一个虚拟字符串,一切都很顺利,我在另一边收到了apiResponse。

答案 1 :(得分:0)

  

使用ArgumentMatchers.any(ApiResponse.class)和   Mockito.any(ApiResponse.class),代码甚至不会编译

由于您的方法需要类类型,因此这些匹配器返回指定类型的对象。

您需要使用您打算传递的确切类来指定匹配器:

Mockito.when(xmlResponseMapper.parseXMLToObject(any(String.class),
 ArgumentMatchers.eq(QuickBaseApiResponse.class))).thenReturn((apiResponse));

如果您将ApiResponse传递给eq(),则不会匹配,因为ApiResponse.classQuickBaseApiResponse.class是不同的实例,并且该方法将始终解析为false。< / p>

apiResponse也必须是QuickBaseApiResponse类型。