java - 在 Spring 单元测试中将 null 注入(inject)到 Autowiring 的 @Resource 成员

标签 java spring

我已经实现了一些使用 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/

相关文章:

java - 为什么 HashMap 重新散列键对象提供的散列码?

java - Eclipse RCP 的 bin.includes 中的 build.properties 中的点是什么意思?

spring - 带有自定义 header 的 Resttemplate GET 请求

java - 找不到 Spring Boot Tomcat 类

java - 锁定相互交易执行

java - 如何使用 XML 中的 CXF JAX-RS 和 Jackson 2 配置服务器返回的日期格式?

java - 通过数字获取当天的名称

java - 多线程应用程序中的 ShutDownHook

java - 如何在没有 xml 的 Spring 中运行方面?

java - 将 MySQL 数据库连接到 Android 应用程序