我正在编写一个需要测试对象的测试用例,但该对象需要大量配置才能正常工作。
现在我有 5或6 接口,其中有许多方法,其中只有少数与测试该对象相关。
所以问题基本上是正确使用Mocking框架来模拟配置相关的接口,还是我应该在测试用例中实现接口来提供数据?
Mockito.mock(IConfiguration.class); //is this a proper use?
编辑:
我在一些地方读过评论不使用模拟来模拟简单对象。在我的情况下,对象很简单,但界面很胖。所以有很多方法。
答案 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
单元时,您不需要实际配置类的实现。您只需要在这些配置类上存根方法调用的行为。