我有一个场景,我在单元测试用例中使用 @InjectMocks 创建 SoapServiceClient 类的实例。我正在尝试在我的单元测试用例中创建以下属性的实例。
@Resource(name="ldapClient")
私有(private)SoapServiceClientsoapServiceClient
;
但是限定名称“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 的实例。
非常感谢任何帮助。
最佳答案
I want @InjectMocks to create instance of SoapServiceClient using ClientFactory getInstance method
为什么不简单地模拟 ClientFactory
的 getInstance()
工厂方法来返回模拟的 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);
}
关于java - 使用 Mockito 模拟 @Resource spring 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47821594/