我有一個精心設計的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");
}
}
這應該有效,但感覺有點笨重。我應該考慮更好的方法嗎?更好的是,是否有機器人擴展程序已經爲我做了這個?
看到這個答案:http://stackoverflow.com/questions/7007205/static-access-to-entity-manager-in-spring-and-unusual-architecture/7007572#7007572爲guick指南啓用@可配置的支持 – Ralph
看起來漂亮,但我無法讓它工作。我添加了' ',按照問題描述創建了一個子類,用'@Configurable(「beanNameOfSuperclass」)'標記了子類,並靜態初始化了spring上下文。然而,依賴關係在運行時仍然是「空」的。 這是應該處理這個註釋的靜態初始化的Spring上下文嗎?也許上下文沒有被足夠早的初始化? –
oksayt
你用AspectJ編譯它並添加庫文件嗎? – Ralph