我有一個春天的JUnit測試類MySimpleTester
:爲什麼我不能從了ApplicationContextAware訪問的ApplicationContext實現豆
@
RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:/spring/mySimpleConfig.xml"})
public class MySimpleTester {
@Before
public void setUp() throws Exception {
myAdapter = (MyAdapter) applicationContext.getBean("myAdapter");
}
@test
public void testGetSimpleList() {
List<SimpleLink> simpleList = **myAdapter.getSimpleLinksList**();
}
... ...
在適配器類我有:
public MyAdapter {
public List<SimpleLink> getSimpleLinksList() {
List<SimpleLink> simLinks = null;
String environment = AppFactory.getPropertiesObj();
... ...
class AppFactory implements ApplicationContextAware {
private static ApplicationContext context;
public void setApplicationContext(ApplicationContext acontext) {
context = acontext;
}
public getPropertiesObj() {
return getAppContext().getBean("propertiesBean");
}
我得到NullPointerException
,看到ApplicationContext
是Null
這裏。
但是在SpringJUnitTestRunner
類MySimpleTester
我可以找到正確初始化的applicationContext。我不包括mySimpleConfig.xml
和包含的文件。 MyAdapter
類getSimpleLinksList()
中的方法在應用程序服務器中運行時可以很好地與Web應用程序配合使用,並且可以在此處獲得appcontext。
只有Spring測試人員無法訪問靜態應用程序上下文AppFactory
類,因爲它通過AppFactory.getPropertiesObj()
靜態調用。當其他測試類正在執行時,我已經正確設置了類路徑。
由於'AppFactory.getPropertiesObj()'是**不是**靜態,'MyAdapter.getSimpleLinksList()'甚至會編譯到什麼程度? – hzpz
在實際的程序中,我的方法是靜態的。寫在這裏的時候我錯過了打字。公共靜態字符串getPropertiesObj(){返回getAppContext()。getBean(「propertiesBean」)。toString(); } – stillanovice