使用Mockito嘲笑@Resource春天的财产



我有一个场景,我正在使用@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());

相关内容

  • 没有找到相关文章

最新更新