2015-04-07 61 views
5

我試圖得到它:如何在junit @BeforeClass靜態方法中訪問spring ApplicationContext?

private static ApplicationContext applicationContext; 
@Autowired 
    public static void setApplicationContext(ApplicationContext applicationContext) { 
     AuditorTest.applicationContext = applicationContext; 
    } 

但它並不爲所有其他努力工作。

如何自動導入靜態ApplicationContext

+0

爲什麼你需要這樣做? –

+0

要在jUnit測試之前填充db? –

+0

你需要爲整個測試用例填充一次嗎? –

回答

4

您不能在static方法上自動佈線彈簧豆。你已經做它的一個實例方法來代替,並讓它的值賦給變量static(將正常工作):

@Autowired 
public void setApplicationContext(ApplicationContext applicationContext) { 
    AuditorTest.applicationContext = applicationContext; 
} 

但我不認爲這是你想要的。我想你應該註釋測試類SpringJUnitRunner,和@ContextConfiguration,然後你就可以自動裝配的ApplicationContext有:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(...) // configuration location 
public class TestClass { 
    @Autowired 
    private ApplicationContext context; 
} 
+1

This解決方案用於訪問上下文,但如果您在@BeforeClass中需要它,那麼您無法訪問非靜態變量。當你有一個在初始化時訪問Context的Bean類時,你需要這個。 –

0

也許你現在可能已經找到了一種解決方法。 可以幫助別人在這裏。

我跑過類似的問題。提供的大多數彈簧框架選項 都不允許對ApplicationContext進行靜態訪問。

解決方法很簡單。使用 ClassPathXmlApplicationContext使用bean配置但靜態地創建您自己的ApplicationContext。

<code> 
public class BaseTestCase { 
    static { 
     AppicationContext context = new ClassPathXmlApplicationContext("test-config.xml"); 
      // Do what you want to do with the context 
      // Probably store in static variable to access somewhere else 
     } 
    } 
</code> 
相關問題