我已经实现了一些使用 Spring Test Framework 的单元测试。测试包括按名称自动连接的成员,例如
@Resource
private FooBar myFooBar;
我将测试配置为能够使用提到的不同配置运行 here .
某些配置不允许运行所有测试(例如没有可用的数据库)。在这种情况下我想跳过测试。我跳过测试的标准是 myFooBar == null
。
assumeTrue(myFooBar != null)
我面临如何将 null
注入(inject)此成员的问题。我试过了
<bean id="myFooBar" class="FooBar">
<null />
</bean>
但这不起作用(发现以元素“null”开头的无效内容...)
如果我不在 context.xml 中配置 bean,则会收到 NoSuchBeanDefinitionException
。
对于 Spring 来说,向我的成员注入(inject) null
并不是那么困难 - 但这对我来说绝对困难:-)
我必须补充一点,我的 FooBar
类没有默认构造函数。
您知道如何注入(inject) null
或如何忽略 Autowiring 测试类成员上缺少的 bean 定义吗?
问候
K·克拉森
最佳答案
如果您使用 @Autowired
按类型 Autowiring ,而不是使用 @Resource
按名称 Autowiring ,那么您可以这样做:
@Autowired(required = false)
private FooBar myFooBar;
设置required = false
将使Spring在无法解析时忽略此依赖关系,如documentation州。
您仍然可以使用 @Autowired
按名称 Autowiring ,使用 @Qualifier
提供 bean 名称:
@Autowired(required = false)
@Qualifier("myFooBar")
private FooBar myFooBar;
有关@Qualifier
的更多信息,请参阅此reference页。
关于java - 在 Spring 单元测试中将 null 注入(inject)到 Autowiring 的 @Resource 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745682/