統合テスト用に精巧な Spring Bean をセットアップしました。現在、テスト データの作成/動作の実行/アサーション メソッドをロボット テストに公開するために、ロボット ライブラリを作成することを検討しています。
ただし、Robot Framework ユーザー ガイドから理解できることは、Robot はコンストラクターを呼び出すことによってのみライブラリ クラスをインスタンス化できるということです。インスタンスをSpringで管理したいので、これは残念です。
理想的には、Robot にアプリケーション コンテキストへのパスとライブラリの Bean 名を提供できるようにしたいと考えています。それができない場合は、Robot がコンストラクターではなく静的ファクトリ メソッドを呼び出せるようにしたいので、新しいインスタンスを作成する必要はありません。
私が考えた 1 つの回避策は、静的イニシャライザーで 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");
}
}
これは機能するはずですが、ややぎこちなく感じます。私が考慮すべきより良い方法はありますか?いっそのこと、私のためにすでにこれを行うロボット拡張機能はありますか?