繁体   English   中英

模拟配置接口是一种做法吗?

[英]Mocking configuration interfaces as a practice?

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

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

因此,问题是,是否应该适当地使用Mocking框架来模拟与配置相关的接口,还是应该在测试用例中实现接口以提供数据?

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

编辑:

我在某些地方读过关于不使用模拟来模拟简单对象的评论。 在我的情况下,对象很简单,但接口却很胖。 因此,有很多方法。

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

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

但是不幸的是,这种简单的常识常常在编写配置框架的人们中丢失。

在测试使用与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单元时,不需要真正配置类的实现。 您只需要在这些配置类上添加方法调用的行为即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM