我有在我的单元测试用例中使用@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);
}