我有在我的单元测试用例中使用@InjectMocks创建SoapServiceClient类实例的方案。我正在尝试在单元测试用例中创建以下属性的实例。

@Resource(name="ldapClient")private SoapServiceClient soapServiceClient;

但是合格名称“ ldapClient”是不同类型的组件(不是SoapServiceClient)ClientFactory。它具有Overridden函数,该函数返回SoapServiceClient的实例。

@Component("ldapClient")
public class ClientFactory implements FactoryBean{
@Override
public Object getInstance() throws Exception {
    final SoapServiceClient service = new SoapServiceClient(endpoint);
    return service;
}
}


使用时如何创建SoapServiceClient实例

@InjectMocks
private SoapServiceClient soapServiceClient;


它是直接创建SoapServiceClient的实例,而不是通过ClientFactory类的getInstance()方法创建它。我希望@InjectMocks使用ClientFactory getInstance方法创建SoapServiceClient实例。

任何帮助都非常感谢。

最佳答案

我希望@InjectMocks使用创建SoapServiceClient实例
  ClientFactory getInstance方法


为什么不简单地模拟getInstance()ClientFactory工厂方法以返回模拟的SoapServiceClient

@Mock
ClientFactory clientFactoryMock;
@Mock
SoapServiceClient soapServiceClientMock;

@Test
public void myTest(){
    ...
   //add record for soapServiceClientMock
   Mockito.when(soapServiceClientMock.xxx()).return(...);
   // and return soapServiceClientMock as getInstance() is invoked
   Mockito.when(clientFactoryMock.getInstance()).return(soapServiceClientMock);
}

09-05 10:54