模拟配置接口作为一种做法?

时间:2013-09-26 14:26:55

标签: java unit-testing mocking

我正在编写一个需要测试对象的测试用例,但该对象需要大量配置才能正常工作。

现在我有 5或6 接口,其中有许多方法,其中只有少数与测试该对象相关。

所以问题基本上是正确使用Mocking框架来模拟配置相关的接口,还是我应该在测试用例中实现接口来提供数据?

Mockito.mock(IConfiguration.class); //is this a proper use?

编辑:

我在一些地方读过评论不使用模拟来模拟简单对象。在我的情况下,对象很简单,但界面很胖。所以有很多方法。

2 个答案:

答案 0 :(得分:1)

是的,这是一个非常好的用例,因为实例化这些接口的实现通常并非易事。

配置应该是一个非常简单的框架,必须允许轻松创建测试实例 - 实际上每秒数十万种不同的配置。或者,如果我的代码不支持数百个配置选项来调整其行为,为什么还需要配置框架?

但不幸的是,编写配置框架的人经常会失去这种简单的智慧。

答案 1 :(得分:0)

在测试使用configuration related interfaces实现的任何类时,您应该使用这些配置接口的mock实现。

subject under test (SUT)将调用配置类的方法来完成其工作。因此,对于给定的输入,您只需要在从您正在测试的方法中调用它们之前,将调用行为调用到配置类的方法之前:

    public class ServiceTest {


    IConfiguration mockConfig;

    private ServiceUnderTest serviceUnderTest;

    @Before
    public void setup() {
        serviceUnderTest = new ServiceUnderTest();
        mockConfig = mock(IConfiguration.class);
        serviceUnderTest.setConfig(mockConfig);
    }

    @Test
    public void test(){
    //Here you can stub the behavior of method calls on "IConfiguration" before they're called
    }
}

在测试ServiceUnderTest单元时,您不需要实际配置类的实现。您只需要在这些配置类上存根方法调用的行为。