Java 存根接口

Java 存根接口,java,stubbing,Java,Stubbing,我必须根据接口进行构建。要进行测试,我需要覆盖接口的3种方法。 我搜索了一些例子,但没能找到一些有效且解释得很好的东西。我不喜欢模拟框架,只是建议最适合我的用例 我需要存根这个功能,不想有400行未使用的覆盖 public class StubInventory implements Inventory { private final ItemStack[] contents; public StubInventory (int size) { con

我必须根据接口进行构建。要进行测试,我需要覆盖接口的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        

}
公共类StubInventory实现库存
{
私有最终ItemStack[]内容;
公共库存(整数大小)
{
内容=新项目堆栈[大小];
}
@凌驾
公共void setItem(int索引,ItemStack项)
{
目录[索引]=项目;
}
@凌驾
公共项堆栈getItem(int索引)
{
返回内容[索引];
}
@凌驾
公共空间清除()
{
Arrays.fill(contents,null);
}

// 你可以很容易地用。看看例子。你想做的是一个基本的模拟工作。

你可以很容易地用。看看例子。你想做的是一个基本的模拟工作。

试试。它在大多数情况下都非常稳定和方便。例如,你可以写:

Inventory inventory = Mockito.mock(Inventory.class);
Mockito.when(inventory.getItem(Mockito.any())).thenReturn(somePresetItemStack);
应在Mockito上使用静态导入。*方法以提高可读性:

import static org.Mockito.*;
试试看。在大多数情况下,它都非常稳定和方便。例如,您可以编写:

Inventory inventory = Mockito.mock(Inventory.class);
Mockito.when(inventory.getItem(Mockito.any())).thenReturn(somePresetItemStack);
应在Mockito上使用静态导入。*方法以提高可读性:

import static org.Mockito.*;

如果您的接口中有400行未使用的方法,那么您的接口可能太大了这不是我的接口。它是一个API。我不能更改接口。我从接口调用方法,在运行时将有一个可用的实现。该实现在测试范围内不可用,我只使用示例中的一小部分。但在运行时,我需要接口的整个实现。@Diemex,这是一个典型的例子测试问题。Mock最好用于单元测试。不幸的是,您的测试似乎不是单元测试。尝试分割功能,以便只测试代码在做什么,而不是模拟接口应该做什么。我在许多论坛上看到和听到的一般建议是:“单元测试不应该包含for cycles”。如果您可以修改代码以遵守此规则,模拟也会容易得多。如果您的接口中有400行未使用的方法,则您的接口可能太大。(请查看。)这不是我的接口。它是一个API。我不能更改接口。我从接口调用方法,在运行时将有一个可用的实现。该实现在测试范围内不可用,我只使用示例中的一小部分。但在运行时,我需要接口的整个实现。@Diemex,这是一个典型的例子测试问题。Mock最好用于单元测试。不幸的是,您的测试似乎不是单元测试。尝试分割功能,以便只测试代码在做什么,而不是模拟接口应该做什么。我在许多论坛上看到和听到的一般建议是:“单元测试不应该包含for cycles”。如果您可以修改代码以遵守此规则,则模拟也将更容易。