我有一个用于集成测试的精心制作的 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");
}
}
这应该可行,但感觉有点笨拙。有没有更好的方法我应该考虑?更好的是,是否有一个机器人扩展已经为我做了这个?