1

我必须针对界面进行构建。为了测试我需要覆盖一个接口的 3 个方法。我搜索了示例,但找不到有效且解释清楚的东西。我对模拟框架没有偏好,只是建议最适合我的用例。

我需要存根这个功能并且不希望有 400 行未使用的覆盖。

public class StubInventory implements Inventory
{
    private final ItemStack[] contents;

    public StubInventory (int size)
    {
         contents = new ItemStack[size];
    }

    @Override
    public void setItem (int index, ItemStack item)
    {
         contents[index] = item;
    }

    @Override
    public ItemStack getItem (int index)
    {
         return contents[index];
    }

    @Override
    public void clear ()
    {
        Arrays.fill(contents, null);
    }

    //<-- Insert 400 lines of unused @Override's here        

}

更新:

我的代码使用了getter,尤其是setter,并且必须工作。这些值不是预定义的。这些值将由我的代码设置,我的测试代码将验证结果。

mockInventory = mock(Inventory.class);
//Not "nice" but will probably work
for (int i = 0; i < size * 9; i++)
    when(mockInventory.getItem(i)).thenReturn(contents[i]);
//This is where the problem is. I need to take item (ItemStack)
// and set it in my stubbed class. Basically I need to access the parameter.
for (int i = 0; i < size * 9; i++)
    when(mockInventory.setItem(i, item)).then(contents[i] = item);
4

2 回答 2

10

试试Mockito。在大多数情况下,它确实稳定且方便。例如,您可以编写:

Inventory inventory = Mockito.mock(Inventory.class);
Mockito.when(inventory.getItem(Mockito.any())).thenReturn(somePresetItemStack);

您应该在 Mockito.* 方法上使用静态导入以获得更好的可读性:

import static org.Mockito.*;
于 2013-07-01T13:08:16.617 回答
0

您可以使用mockito轻松做到这一点。看看例子。你想做的是一个基本的模拟工作。

于 2013-07-01T13:07:44.280 回答