1

假设我有这项服务:

public class Service
{
   ... 

  public Service(IFactory factory)
  {
      ...
  }

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

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

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

4

1 回答 1

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();
于 2012-05-13T13:29:08.190 回答