私は積分テストのために精巧なSpring Beanセットアップを持っています。今私は、テストデータの作成/動作の実行/アサーションメソッドをロボットテストに公開するためのロボットライブラリを作成しています。robotframeworkでSpring-wiredライブラリを使用する
私はthe Robot Framework user guideから理解していることは、ロボットはコンストラクタを呼び出すことによってのみライブラリクラスをインスタンス化できることです。これはむしろ私のインスタンスがSpringによって管理されているので、バマーです。
理想的には、RobotにアプリケーションコンテキストへのパスとライブラリのBean名を渡すことができます。失敗したら、Robotがコンストラクタではなく静的なファクトリメソッドを呼び出せるようにしたいので、新しいインスタンスを作成する必要はありません。
私は、静的初期化子にSpringコンテキストを作成し、そのコンテキストからBeanを取得して依存関係を配線することを考えました。
私の元のクラスは次のようになります。だから私はprotected
する上記@Autowired
フィールドを変更し、静的Springコンテキストを初期化し、ロボットに優しいコンストラクタを定義し、サブクラス作成することになり
public class MyAwesomeTests {
@Autowired
private ThisHelper thisHelper;
@Autowired
private ThatHelper thatHelper;
// implementations of test steps and such
}
:
を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");
}
}
これはうまくいくはずですが、ややこしい感じです。私が考慮すべきよりよい方法はありますか?さらに良いことに、私のために既にこれを行っているロボットの拡張機能はありますか?
この回答を見る:@stackoverflow.com/questions/7007205/static-access-to-entity-manager-in-spring-and-unusual-architecture/7007572#7007572 @設定可能なサポート – Ralph
これは気の利いたようですが、動作させることができませんでした。私は ' 'を追加し、質問に記述されているようにサブクラスを作成し、サブクラスに '@Configurable(" beanNameOfSuperclass ")'をマークし、スプリングコンテキストを静的に初期化しました。しかし、依存関係は実行時に 'null'です。 この注釈の権利を処理するはずの静的に初期化されたSpringコンテキストです。コンテキストが早期に初期化されていない可能性がありますか? –
oksayt
AspectJでコンパイルしてライブラリを追加しましたか? – Ralph