0

統合テスト用に精巧な 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");
    }
}

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

4

2 に答える 2

1

Spring の使用について考えたことはありますか?@Configurable通常のインスタンスによって作成されたインスタンスでさえ、 Springnew管理の Bean になります。

@See Spring Reference Chapter 7.8.1 Using AspectJ to Dependency Inject domain objects with Spring

于 2011-08-11T10:20:48.303 に答える
0

Springを使用してテストライブラリをワイヤリングすることをサポートするRobotFramework拡張機能があります。http ://code.google.com/p/robotframework-javalibcore/wiki/SpringLibraryをご覧ください。

私はSpringにまったく精通していないので、それがあなたのケースをサポートするかどうかは完全にはわかりません。

于 2011-09-01T04:23:46.807 に答える