【问题标题】:@Autowired annotation not able to inject bean in JUnit class@Autowired 注解无法在 JUnit 类中注入 bean
【发布时间】:2026-02-24 17:15:02
【问题描述】:

我的测试课:

public class myTest extends TestCase{
@Autowired
BeanClass beanObject
public void beanTest()
{
Classdata data = beanObject.getMethod();
}
}

我在以下行收到空指针异常:

Classdata data = beanObject.getMethod();

beanObject.getMethod(); 正好给出了空指针异常

我应该如何在我的 Junit 类中实现字段 beanObject 的自动装配,以便我可以使用“BeanClass”类中的方法?


复制自评论:

简单来说.. beanClass 是一个 具有某些方法的接口.. 我已经用 @Service("beanObject") 注释..banClass 是 由 beanClassImpl 类实现 它具有方法实现.. 我需要在 我的 testClass 来获取数据 比较..为此我正在做 @Autowired beanClass beanObject in 我的testClass ..我会非常糟糕 哪里出错了?

【问题讨论】:

  • Spring 应该从哪里获得beanObject?你有没有在某个地方声明过?
  • beanObject 已经是一个 beanClass 对象,我已将 beanClass 声明为 @Service("beanObject") 注释。

标签: java spring junit


【解决方案1】:

你可能需要用这些注解来装饰你的测试:

@ContextConfiguration(locations = {/* your xml locations here */})
@RunWith(SpringJUnit4ClassRunner.class)

或者,如果您使用 JUnit 3.x,您应该从 AbstractJUnit38SpringContextTests 扩展

参考:TestContext support classes

更新:问题似乎是找不到上下文文件(参见 cmets 中的讨论)。

简单来说.. beanClass 是一个 具有某些方法的接口.. 我已经用 @Service("beanObject") 注释..banClass 是 由 beanClassImpl 类实现 它具有方法实现.. 我需要在 我的 testClass 来获取数据 比较..为此我正在做 @Autowired beanClass beanObject 在我的 testClass .. 我大错特错了 什么地方?

更多更新:

不要注解接口,注解实现类。用@Service注解接口没有效果!

【讨论】:

  • @ContextConfiguration(locations = {spring-servlet.xml}) @RunWith(SpringJUnit4ClassRunner.class)
  • @user582811 好的,那么你应该编辑问题并显示spring-servlet.xml的相关部分
  • @user582811 在 WEB-INF 下?并且测试找到上下文文件?
  • 测试找不到上下文文件
  • @user582811:这么想。试试这个:locations = "classpath:WEB-INF/spring-servlet.xml"