2011-08-11 35 views
0

我有一個精心設計的Spring bean集成測試。現在我正在研究編寫一個Robot庫來將我的測試數據創建/行爲執行/斷言方法公開給機器人測試。在機器人框架中使用Spring-wired庫

但是我從the Robot Framework user guide瞭解到的是,Robot只能通過調用構造函數來實例化庫類。這是一個無賴,因爲我寧願讓我的實例由Spring管理。

理想情況下,我希望能夠給Robot提供應用程序上下文的路徑和庫的bean名稱。否則,我希望Robot能夠調用靜態工廠方法而不是構造函數,所以我不必強制創建一個新實例。

我想到的一種解決方法是在靜態初始化器中創建Spring上下文,並通過從該上下文中獲取bean來連接我的依賴項。

我的原班貌似:

public class MyAwesomeTests { 

    @Autowired  
    private ThisHelper thisHelper; 

    @Autowired  
    private ThatHelper thatHelper; 

    // implementations of test steps and such 

} 

所以我會改變上述@Autowired領域是protected,並創建一個子類靜態初始化Spring上下文,並定義了一個機器人友好的構造函數:

public class RobotFriendlyTests extends MyAwesomeTests { 

    private static final ApplicationContext CONTEXT = new ClassPathXmlApplicationContext(...); 

    public RobotFriendlyTests() { 
     this.thisHelper = (ThisHelper) CONTEXT.getBean("thisHelper"); 
     this.thatHelper = (ThatHelper) CONTEXT.getBean("thatHelper"); 
    } 
} 

這應該有效,但感覺有點笨重。我應該考慮更好的方法嗎?更好的是,是否有機器人擴展程序已經爲我做了這個?

回答

1

你有沒有想過使用Spring @Configurable,那麼即使是由普通的new創建的實例也會成爲spring管理的bean。

@see Spring參考章節7.8.1 Using AspectJ to dependency inject domain objects with Spring

+0

看到這個答案:http://stackoverflow.com/questions/7007205/static-access-to-entity-manager-in-spring-and-unusual-architecture/7007572#7007572爲guick指南啓用@可配置的支持 – Ralph

+0

看起來漂亮,但我無法讓它工作。我添加了'',按照問題描述創建了一個子類,用'@Configurable(「beanNameOfSuperclass」)'標記了子類,並靜態初始化了spring上下文。然而,依賴關係在運行時仍然是「空」的。 這是應該處理這個註釋的靜態初始化的Spring上下文嗎?也許上下文沒有被足夠早的初始化? – oksayt

+0

你用AspectJ編譯它並添加庫文件嗎? – Ralph