0

我有一个用于集成测试的精心制作的 Spring bean 设置。现在我正在考虑编写一个机器人库,以将我的测试数据创建/行为执行/断言方法公开给机器人测试。

但是,我从Robot Framework 用户指南中了解到的是,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");
    }
}

这应该可行,但感觉有点笨拙。有没有更好的方法我应该考虑?更好的是,是否有一个机器人扩展已经为我做了这个?

4

2 回答 2

1

您是否考虑过使用 Spring @Configurable,那么即使是由普通创建的实例new也将成为 Spring 托管的 bean。

@参见 Spring 参考第7.8.1 章使用 AspectJ 使用 Spring 依赖注入域对象

于 2011-08-11T10:20:48.303 回答
0

有一个支持使用 Spring 连接测试库的 Robot Framework 扩展,请查看:http ://code.google.com/p/robotframework-javalibcore/wiki/SpringLibrary

我不完全确定它是否支持您的情况,因为我对 Spring 一点也不熟悉。

于 2011-09-01T04:23:46.807 回答