我有一个场景,我正在使用@InjectMocks在我的单元测试用例中创建SoapServiceClient类的实例。我正在尝试在我的单元测试用例中创建以下属性的实例。
@Resource(name="ldapClient")
private SoapServiceClient soapServiceClient
;
但是限定名称"ldapClient"是不同类型(不是SoapServiceClient)ClientFactory的组件。它有一个覆盖函数,返回SoapServiceClient的实例。
@Component("ldapClient")
public class ClientFactory implements FactoryBean{
@Override
public Object getInstance() throws Exception {
final SoapServiceClient service = new SoapServiceClient(endpoint);
return service;
}
}
当我使用时,如何创建肥皂服务客户端的实例
@InjectMocks
private SoapServiceClient soapServiceClient;
它直接创建SoapServiceClient的实例,而不是通过ClientFactory类的getInstance()方法创建它。我希望@InjectMocks使用ClientFactory getInstance方法创建SoapServiceClient的实例。
任何帮助真的非常感谢。
我希望@InjectMocks使用 客户端工厂获取实例方法
为什么不干脆嘲笑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);
}
可以使用 spring 的 ReflectionTestUtils 进行模拟,如下所示:
ReflectionTestUtils.setField(service, "soapServiceClient", new ldapClient());