2011-04-21 210 views
0

我已经实现了一些使用Spring Test Framework的单元测试。测试包括通过名称自动装配的成员,例如,在null单元测试中注入null给autowired @Resource成员

@Resource 
private FooBar myFooBar; 

我配置我的测试,以便能够与像提到here不同的配置运行。

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

assumeTrue(myFooBar != null) 

我正面临着如何将null注入此成员的问题。我试图

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

但这不起作用(无效的含量被发现开始元素“空” ...

如果我没有在我的context.xml我得到一个配置豆NoSuchBeanDefinitionException

不能是很难春季刚刚注入null我的成员 - 但它definitly我很难:-)

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

您是否有任何关于如何注入null或如何忽略自动装配测试类成员上缺少的bean定义的想法?

问候
    K. Claszen

+0

请参阅http://stackoverflow.com/questions/2163182/intentionally-setting-a-spring-bean-to-null/2163329 – axtavt 2011-04-21 15:20:51

+0

@axtavt谢谢我没有找到。在链接的位置为您+1。 – FrVaBe 2011-04-21 15:32:09

回答

7

如果你会使用@Autowired而不是自动装配名与@Resource型自动装配,然后你可以这样做:

@Autowired(required = false) 
private FooBar myFooBar; 

设置required = false将使春季忽略此如果无法解析,则依赖关系,如documentation所述。

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

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

欲了解更多信息有关@Qualifier看到这个reference页。

+0

这听起来很不错。星期二将回到办公室。将尽快提供反馈意见。 – FrVaBe 2011-04-22 19:27:48

+0

适合我的作品。谢谢! – FrVaBe 2011-04-26 07:18:06