假设我有这项服务:
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?这是正确的方法吗?
答案 0 :(得分:0)
这是一个非常常见的用例。是的,你必须从模拟工厂返回模拟,然后对模拟进行验证。这里使用mockito语法:
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();