首页 > 解决方案 > Spring 模糊构造函数

问题描述

我从事一个混合了 XML 和带注释的 bean 的大型遗留项目。在这个例子中,我想用 Mockito 创建一个模拟对象:

<bean id="f1" class="org.mockito.Mockito" factory-method="mock">
  <constructor-arg type="java.lang.Class" value="FireEngine"/>
</bean>

Mockito 有三个称为 mock() 的方法。我想要的一个将 Class 作为其唯一参数,其他 mock() 方法采用不适用于我的用例的附加参数。

当我尝试加载时,出现 Spring 错误:

Ignoring factory method [public static java.lang.Object 
org.mockito.Mockito.mock(java.lang.Class, java.lang.String)] of bean "f1".
...
Ambiguous argument values for parameter of type [java.lang.String] - did you pass 
the correct bean references as arguments.

是否可以告诉 Spring 使用的确切方法?我尝试将类型和索引添加到构造函数参数,但没有任何变化。我已经读过将@Autowire 添加到我有兴趣调用的方法中可以解决问题,但我无法使用第三方库来解决这个问题。

起作用的是创建我自己的包装 Mockito 的静态 Mock 工厂。它可以工作并且没问题,但我想知道是否有办法让 Spring 做正确的事情,因为我与其他工厂和构造函数有类似的问题。正如我所说,它是遗留代码,我不想添加很多包装器。

有许多关于 Spring 和模棱两可的构造函数的类似问题,但答案假设您可以注释您尝试构建的代码。这不是这里的情况。

标签: javaspringmockito

解决方案


推荐阅读