模拟在 setter 中返回克隆对象的列表



我正在尝试模拟列表

counted[binModel.getX() - 1][binModel.getY() - 1].add(activeModel);

add是一个boolean,我正在尝试这个

Mockito.when(testee.getCounted()[binModel.getSelectionX() - 1]
    [binModel.getSelectionY() - 1].add(activeModel)).thenReturn(Mockito.anyBoolean());

这会引发错误

public List<CountModel>[][] getCounted() {
    return counted.clone();
}

counted在原始类中声明为

private List<CountModel>[][] counted;

这是错误:

空指针和@mock私有列表[][]计数;莫基托不能模拟/监视以下内容: - 期末课程 - 匿名类 - 基元类型

数组

是Java中的最后一个类,所以不能被嘲笑。

您可能要做的是自己用模拟填充数组,例如......

// Lose the @Mock annotation if that's how you set it up
private List<CountModel>[][] counted;
@Before
@SuppressWarnings("unchecked")
public void setup() {
    counted = new List[X_SIZE][Y_SIZE];
    for(int x = 0; x < X_SIZE; x++) {
        for(int y = 0; y < Y_SIZE; y++) {
            counted[x][y] = mock(List.class);
        }
    }
}

(不知道为什么你真的想模拟一个列表)

为了绕过"克隆"的事情,您可以构建另一个模拟来表示克隆列表,或者只返回相同的列表......

@Before
@SuppressWarnings("unchecked")
public void setup() {
    counted = new List[X_SIZE][Y_SIZE];
    for(int x = 0; x < X_SIZE; x++) {
        for(int y = 0; y < Y_SIZE; y++) {
            counted[x][y] = mock(List.class);
            when(counted[x][y].clone()).thenReturn(counted[x][y]);
        }
    }
}

就像我说的,模拟可能不是模拟列表的最佳用途。也许创建一个包含模拟"计数模型"或其他内容的真实列表?

(您可能需要发布完整的代码,以便让我更多地了解您要做什么)

相关内容

  • 没有找到相关文章

最新更新