Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit模拟泛型类作为方法参数_Java_Unit Testing_Junit_Atlas - Fatal编程技术网

Java Junit模拟泛型类作为方法参数

Java Junit模拟泛型类作为方法参数,java,unit-testing,junit,atlas,Java,Unit Testing,Junit,Atlas,我正在编写单元测试,并通过Junit框架验证其中的方法调用。我实现的方法在我的代码库中说明如下: AtlasBaseClient.API api = new AtlasBaseClient.API("api/atlas/v2/types/typedefs","PUT",Response.Status.OK); 1. client.callAPI(api, (Class<?>) null, (Object) objectMapper.w

我正在编写单元测试,并通过Junit框架验证其中的方法调用。我实现的方法在我的代码库中说明如下:

AtlasBaseClient.API api = new AtlasBaseClient.API("api/atlas/v2/types/typedefs","PUT",Response.Status.OK);

1.     client.callAPI(api, (Class<?>) null, (Object) objectMapper.writeValueAsString(type), null);
2.     client.callAPI(api, (Class<?>) null, object, null);
AtlasBaseClient.API=新的AtlasBaseClient.API(“API/atlas/v2/types/typedefs”,“PUT”,Response.Status.OK);
1.client.callAPI(api,(类)null,(对象)objectMapper.writeValueAsString(类型),null);
2.callAPI(api,(类)null,object,null);
上述方法的库声明为:

public <T> T callAPI(AtlasBaseClient.API api, Class<T> responseType, Object requestObject, String... params) throws AtlasServiceException {
    return this.callAPIWithResource(api, this.getResource(api, params), requestObject, responseType);
  }
public T callAPI(AtlasBaseClient.API、类responseType、对象requestObject、字符串…params)抛出AtlasServiceException{
返回this.callAPIWithResource(api,this.getResource(api,参数),requestObject,responseType);
}
现在,我正在编写单元测试,并希望验证是否调用了这些方法,以及我正在尝试的代码片段的样子

verify(client, times(1)).callAPI(any(AtlasBaseClient.API.class), (Class<?>) null, any(Object.class), any());
verify(client,times(1)).callAPI(any(AtlasBaseClient.API.class),(class)null,any(Object.class),any());

但根据Junit框架,如果其中一个参数通过了matcher,而不是所有其他参数,那么也应该使测试失败。

如果在
验证
测试中使用matcher,则所有
参数都必须是matcher,这就是
InvalidUseOfMatchersException
的意思

您正在显式测试
null
的第二个参数,它应该是
Mockito.isNull()
或类似的参数

i、 e

verify(client,times(1)).callAPI(any(AtlasBaseClient.API.class)、isNull()、any(Object.class)、any());
验证(客户端,时间(2)).callAPI(any(AtlasBaseClient.API.class)、Mockito.isNull()、any(Object.class)、any());

您还可以提供错误消息来澄清问题。org.mockito.exceptions.misusing.InvalidUseOfMatchersException:参数匹配器的使用无效!预期4个匹配器,记录3个:如果匹配器与原始值组合,则可能发生此异常://不正确:someMethod(anyObject(),“原始字符串”);使用匹配器时,所有参数都必须由匹配器提供。例如://correct:someMethod(anyObject(),eq(“字符串匹配器”);由于方法重载,这在编译时失败。下面是两个方法public T callAPI(AtlasBaseClient.API、类响应类型、对象请求对象、字符串…参数)抛出AtlasServiceException{}public T callAPI(AtlasBaseClient.API、GenericType响应类型、对象请求对象、字符串…参数)抛出AtlasServiceException{}@OPTIMUS:然后您可以将第二个参数强制转换为您计划调用的任何类型,或者使用
Mockito.isNull()
或类似的方法。(尽管我希望如果你点击IDE的建议,IDE会为你建议并解决这个问题。)谢谢,它成功了。验证(client,times(2)).callAPI(any(AtlasBaseClient.API.class)、Mockito.isNull()、any(Object.class)、any())@擎天柱很酷,将答案标记为正确,尽管它是解决方案,但出于某种原因,它还是被否决了。
verify(client, times(2)).callAPI(any(AtlasBaseClient.API.class), Mockito.<Class>isNull(), any(Object.class), any());