我使用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