无法用列表类型参数模拟方法

mzillmmw  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(297)

我有这样的方法

public int[] processData(List<Data> dataList){
    //business logic
}

我用下面的方法来嘲笑它

when(processData(anyList())).thenReturn(new int[]{1,1});

when(processData(Mockito<Data>.anyList())).thenReturn(new int[]{1,1});

但什么都不管用。
我使用的是带有Java11和Mockito3.1的SpringBoot
有没有其他方法来嘲笑同样的事情?

odopli94

odopli941#

你的例子对我很有用:

import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import static org.mockito.ArgumentMatchers.anyList;
import static org.mockito.Mockito.when;

@ExtendWith(MockitoExtension.class)
public class Test {

    @Mock
    A a;

    @org.junit.jupiter.api.Test
    public void t1() {
        when(a.processData(anyList())).thenReturn(new int[]{1,1});
        System.out.println(Arrays.toString(a.processData(new ArrayList<>())));
    }
}
interface Data {}
interface A {
     int[] processData(List<Data> dataList);
}

这张照片: [1, 1]

g6ll5ycj

g6ll5ycj2#

mockito利用 equal() 作为验证/匹配参数值的遗留方法。
在某些情况下,用户在验证参数值时需要更大的灵活性,因此最好使用参数匹配器,而不是 equal() 方法。
注:
eq(obj)根据equals方法检查参数是否等于obj。即使您在不使用匹配器的情况下传递实际值,这也适用。 equals() 方法要求要使两个列表相等,它们必须以相同的顺序包含相同的元素。
如果有两个列表,列表的类型应该匹配。
详见文件:https://docs.oracle.com/javase/6/docs/api/java/util/list.html#equals%28java.lang.object%29

tp5buhyn

tp5buhyn3#

您可以尝试使用when(processdata(mock(list.class)).thenreturn(new int[]{1,1}),但您的变量when(processdata(anylist()).thenreturn(new int[]{1,1})也适用于我。

相关问题