2011-08-11 8 views
0

私は積分テストのために精巧な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"); 
    } 
} 

これはうまくいくはずですが、ややこしい感じです。私が考慮すべきよりよい方法はありますか?さらに良いことに、私のために既にこれを行っているロボットの拡張機能はありますか?

答えて

1

Spring @Configurableを使用することを考えたことがあります。通常のnewで作成されたインスタンスでも、スプリングマネージドBeanになります。

@see春リファレンス章7.8.1 Using AspectJ to dependency inject domain objects with Spring

+0

この回答を見る:@stackoverflow.com/questions/7007205/static-access-to-entity-manager-in-spring-and-unusual-architecture/7007572#7007572 @設定可能なサポート – Ralph

+0

これは気の利いたようですが、動作させることができませんでした。私は ''を追加し、質問に記述されているようにサブクラスを作成し、サブクラスに '@Configurable(" beanNameOfSuperclass ")'をマークし、スプリングコンテキストを静的に初期化しました。しかし、依存関係は実行時に 'null'です。 この注釈の権利を処理するはずの静的に初期化されたSpringコンテキストです。コンテキストが早期に初期化されていない可能性がありますか? – oksayt

+0

AspectJでコンパイルしてライブラリを追加しましたか? – Ralph

0

ワイヤ試験ライブラリに春を使用してサポートしているロボットのフレームワークの拡張機能があります、見てみましょう:http://code.google.com/p/robotframework-javalibcore/wiki/SpringLibrary

私はそれが私ので、あなたのケースをサポートしているかどうか全くわかりません春にはなじみがない。

関連する問題