在弹簧单元测试中将null注入自动装配的@Resource成员

时间:2011-04-21 14:44:46

标签: java spring

我已经实现了一些使用Spring Test Framework的单元测试。测试包括通过名称自动装配的成员,例如

@Resource
private FooBar myFooBar;

我将测试配置为能够使用提到的here等不同配置运行。

某些配置不允许运行所有测试(例如,没有可用的数据库)。我想在这种情况下跳过测试。我跳过测试的标准是myFooBar == null

assumeTrue(myFooBar != null)

我遇到了如何将null注入此成员的问题。我试过了

<bean id="myFooBar" class="FooBar">
  <null />
</bean>

但这不起作用(从元素'null'开始找到无效内容......

如果我没有在context.xml中配置bean,我会得到NoSuchBeanDefinitionException

对于Spring来说,向我的会员注入null并不是那么难 - 但这对我来说确实很难: - )

我必须补充一点,我的FooBar类没有默认构造函数。

您是否知道如何注入null或如何忽略自动连接的测试类成员上缺少的bean定义?

问候
K. Claszen

1 个答案:

答案 0 :(得分:7)

如果您使用@Autowired按类型自动装箱,而不是使用@Resource按名称进行自动装配,那么您可以这样做:

@Autowired(required = false)
private FooBar myFooBar;

设置required = false将使Spring忽略此依赖关系,如果它无法解析,就像documentation状态一样。

您仍然可以使用@Autowired使用@Qualifier按名称使用自动装配来提供bean名称:

@Autowired(required = false)
@Qualifier("myFooBar")
private FooBar myFooBar;

有关@Qualifier的更多信息,请参阅此reference页。