标签: argument-matcher

模拟resttemplate交换总是返回null

我试图通过mockito模拟restTemplate.exchange方法,但无论我通过mock返回什么,它总是返回空值,即使我抛出异常:

这是实际的代码:

ResponseEntity<List<LOV>> response = restTemplate.exchange(url, GET, null,new ParameterizedTypeReference<List<LOV>>() {});
Run Code Online (Sandbox Code Playgroud)

模拟代码:

 ResponseEntity<List<LOV>> mockResponse = new ResponseEntity<List<LOV>>(mockLovList() ,HttpStatus.ACCEPTED);

Mockito.when(restTemplate.exchange(any(), eq(GET), any(), ArgumentMatchers.<ParameterizedTypeReference<List<LOV>>>any())).thenReturn(mockResponse);
Run Code Online (Sandbox Code Playgroud)

交换模拟中的每个参数都是 ArgumentMatchers 类型,mockLovList() 返回一个 LOV 列表

它应该返回我嘲笑的任何内容,但它总是返回 null

junit spring mockito resttemplate argument-matcher

6
推荐指数
1
解决办法
2万
查看次数

Mockito anyListOf() List&lt;List&lt;String&gt;&gt;

我正在使用mockito-core:2.8.47andJava 7并希望在 when 和 verifyanyListOf或其他任何方法中使用。我的问题是,如果我只是使用anyList它说:

类型 Y 中的方法名称 ( int, List < List < String >>) 不适
用于参数 ( int, List < Object > )

我怎样才能解决这个问题?

ArgumentMatchers.anyListOf(ArgumentMatchers.anyListOf( String.class ) )不起作用...

java unit-testing mockito java-7 argument-matcher

4
推荐指数
1
解决办法
2万
查看次数

Mockito没有正确地将列表作为参数存根

我正在尝试模拟一个类,并在调用模拟对象上的方法时返回一个存根的对象列表.让我们考虑以下代码:

interface MyRepositry{
       public List<MyClass> getMyClassInstances(String str,Long id,List<Integer> statusList);
}
Run Code Online (Sandbox Code Playgroud)

我在上面的方法ivocation嘲笑如下:

when(myRepository.getMyClassInstances("1234", 200L, stubbedList)).thenReturn(stubbedMyClassInstanceList);
Run Code Online (Sandbox Code Playgroud)

哪里

 stubbedList 
Run Code Online (Sandbox Code Playgroud)

我是通过插入两个整数1和3.在实际通话创建列表也是我通过我构建出在这里有整数1和3点OT笔记列表是stubbedList对象,并在实际通话清单对象是不同的,但总是包含两个整数1和3.

stubbedMyClassInstanceList    
Run Code Online (Sandbox Code Playgroud)

是MyClass实例的存根列表.

然而,当我运行测试时,mockito会返回一个空列表.我做了一些调试,我猜mockito无法匹配我正在使用的列表对象

      when(..).thenReturn(..)
Run Code Online (Sandbox Code Playgroud)

呼叫和实际呼叫,因此找不到正确的签名.

我不能用

anyList() 
Run Code Online (Sandbox Code Playgroud)

matcher因为我总是传递两个整数的列表(1和3).

我已经通过使用自定义解决了这个问题

     ArgumentMatcher 
Run Code Online (Sandbox Code Playgroud)

如下 :

     class StatusMatcher extends ArgumentMatcher<List> {
    public boolean matches(Object list) {
        List statuses = ((List) list);
        return (statuses.size() == 2 && statuses.contains(1) && statuses.contains(3));
    }
}
Run Code Online (Sandbox Code Playgroud)

所以问题是:

1)我猜测为什么短戳/嘲弄不正常?2)并且我使用的解决方案是正确的吗?

java unit-testing mockito stubbing argument-matcher

3
推荐指数
1
解决办法
5143
查看次数