java - 使用 Mockito 模拟 @Resource spring 属性

标签 java spring mockito

我有一个场景,我在单元测试用例中使用 @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

为什么不简单地模拟 ClientFactorygetInstance() 工厂方法来返回模拟的 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/

相关文章:

java - 引用 .jar 文件中的图像

java - 如何使用错误响应休息模板处理 200 状态代码?

forms - 避免 spring <form :input path ="var"/> for int variable 中的默认值

java - 如果 Java 中的方法存在于外部 jar 中,如何模拟该方法?

java - 在单元测试中使用接口(interface)

java - WHERE 阿拉伯语条件下的 SQL 查询

java - jMonkeyEngine 忽略 Nifty GUI 形式的键盘输入

java - 如何在计算中使用增量?

java - 如何在自定义 Spring Data Rest Controller 中正确处理 POST?

java - 在子类上使用 Mockito spy 时调用抽象类中的可变长度参数方法抛出异常