2013-09-26 41 views
0

我正在编写一个测试用例,我需要测试一个对象,但该对象需要很多配置才能正常工作。嘲笑配置接口作为一种做法?

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

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

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

编辑:

我在一些地方上没有使用的嘲弄嘲弄简单的物体,其评读。在我的情况下,对象很简单,但界面很胖。所以有很多方法。

+0

如果甚至有一个配置设置与您的测试相关,那么您需要一些自定义实现。您可以通过各种方式轻松完成此操作。 – blgt

回答

1

是的,这是一个非常好的用例,因为实例化这些接口的实现通常不是微不足道的。

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

但不幸的是,这种简单的智慧经常在编写配置框架的人身上丢失。

+0

+1往往?我会说永远。 – blgt

+0

@blgt:我说“实现”:-) –

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单元,你不需要真正的配置类的实现。您只需要在这些配置类上存根方法调用的行为。