我使用JUnit,但有些测试有一些问题,这些测试在Spring bean中有@Autowired注释,当我引用它们时,@Autowired的bean始终为NULL。@Autowired with JUnit tests
下面是示例代码:
public class Test {
protected ApplicationContext ac;
@Before
public void setUp() {
ac = new FileSystemXmlApplicationContext("classpath:config/applicationContext.xml"
"classpath:config/test-datasources.xml");
}
@Test
public void testRun() throws Exception {
IManager manager = (IManager)this.ac.getBean("manager");
manager.doSomething();
}
}
@Service
public class Manager implements IManager {
public boolean doSomething() throws Exception {
ParametersJCSCache parametersJCSCache = new ParametersJCSCache();
String paramValue = parametersJCSCache.getParameter("XPTO");
...
}
}
public class ParametersJCSCache extends SpringBeanAutowiringSupport {
@Autowired
private IParameterManager parameterManager; //THIS IS NULL
}
当调用管理器对象的弹簧产生的代理,但访问@Autowired parameterManager当对象为空,并用这个问题我不能测试此方法。
任何想法是什么造成这种情况?为什么对象没有被注入?它在Web应用程序的上下文中运行良好,但在测试上下文中始终为NULL。
正确。那为什么我使用Autowired,如果ParametersCache是一个弹簧托管bean,我不需要Autowired Manager bean。这在Web应用程序上下文中起作用。 – bigster 2014-10-20 10:16:43
如果ParametersJCSCache是一个非Spring的托管bean,Spring怎么可以注入IParameterManager? – 2014-10-20 10:18:37
这就是神秘感,当我在web上下文中调用相同的代码时,这会起作用。使用JUnit不会得到相同的行为。 ParametersJCSCache类扩展了SpringBeanAutowiringSupport。忘记把它放在代码中。 – bigster 2014-10-20 10:28:39