2015-08-21 38 views
2

我有一個春天的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,看到ApplicationContextNull這裏。

但是在SpringJUnitTestRunnerMySimpleTester我可以找到正確初始化的applicationContext。我不包括mySimpleConfig.xml和包含的文件。 MyAdaptergetSimpleLinksList()中的方法在應用程序服務器中運行時可以很好地與Web應用程序配合使用,並且可以在此處獲得appcontext。

只有Spring測試人員無法訪問靜態應用程序上下文AppFactory類,因爲它通過AppFactory.getPropertiesObj()靜態調用。當其他測試類正在執行時,我已經正確設置了類路徑。

+0

由於'AppFactory.getPropertiesObj()'是**不是**靜態,'MyAdapter.getSimpleLinksList()'甚至會編譯到什麼程度? – hzpz

+0

在實際的程序中,我的方法是靜態的。寫在這裏的時候我錯過了打字。公共靜態字符串getPropertiesObj(){返回getAppContext()。getBean(「propertiesBean」)。toString(); } – stillanovice

回答

0

如果要訪問當前的ApplicationContext在MySimpleTester: -

public class MySimpleTester { 

@Autowired 
ApplicationContext applicationContext; 

@Before 
    public void setUp() throws Exception { 
     myAdapter = (MyAdapter) applicationContext.getBean("myAdapter"); 
    } 

@test 
public void testGetSimpleList() { 
     List<SimpleLink> simpleList = **myAdapter.getSimpleLinksList**(); 
} 
+0

我沒有得到你的意思是阿米特。請注意,MySimpleTester是主要的Junit類,因此它需要加載Spring上下文Xmls。所以我需要它有RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {「classpath:/spring/mySimpleConfig.xml」})我的需求是在AppFactory類中,它應該獲得與主Junit類相同的ApplicationContext 。爲什麼AppFactory無法獲得ApplicationContext對象引用併爲空? – stillanovice

0

我認爲這是爲多個應用程序上下文創建發生。 AplliCationContext對象應該是單例。但是當從靜態方法中我們再次調用applicationContext時,它指的是完全不同的確認。 ApplicationContext甚至沒有在那裏初始化。

從Spring MVC webcontanier調用同一個模塊時,不會發生這種情況。只有當您嘗試使用Spring測試程序類RunWith(SpringJUnit4ClassRunner.class)時纔會發生。我可以在業務方法中傳遞AppContext,但我不想更改bsiness方法簽名。我在春季社區發現了一些類似的問題。

相關問題