模拟工厂并验证是否在返回的类型上调用了方法

时间:2012-05-13 13:14:33

标签: unit-testing mocking factory

假设我有这项服务:

public class Service
{
   ... 

  public Service(IFactory factory)
  {
      ...
  }

  public void Method() 
  {
      IInsatnce instance1 = factory.CreateInstance(params1);
      IInstance instance2 = factory.CreateInstance(params2);

      instance1.CallMethod1();
      instance2.CallMethod2();
  }      
}

我想在测试中验证这些创建的实例上的方法是否被调用。至于我是unserstanding,我必须创建将返回模拟实例的工厂的模拟。但是,我是否应该继续引用将在Method()中创建的所有模拟实例并使用它们来验证方法calles?这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

这是一个非常常见的用例。是的,你必须从模拟工厂返回模拟,然后对模拟进行验证。这里使用语法:

IInstance instanceMock1 = mock(IInstance.class);
IInstance instanceMock2 = mock(IInstance.class);
IFactory factoryMock = mock(IFactory.class);

given(factoryMock(params1)).willReturn(instanceMock1);
given(factoryMock(params2)).willReturn(instanceMock2);

//...
verify(instanceMock1).CallMethod1();
verify(instanceMock2).CallMethod2();