我需要将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。
答案 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.class
和QuickBaseApiResponse.class
是不同的实例,并且该方法将始终解析为false。< / p>
apiResponse
也必须是QuickBaseApiResponse
类型。