我有一个用于集成测试的详细的Spring bean设置。现在,我正在考虑编写一个Robot库来向Robot测试公开我的测试数据创建/行为执行/断言方法。
然而,我从the Robot Framework user guide那里了解到的是,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");
}
}这应该是可行的,但感觉有点笨拙。有没有更好的办法让我考虑?更好的是,有没有Robot扩展已经为我做了这件事?
发布于 2011-08-11 18:20:48
您是否考虑过使用Spring,那么即使是由普通new创建的实例也将成为spring托管bean。
@参阅Spring Reference章节7.8.1 Using AspectJ to dependency inject domain objects with Spring
发布于 2011-09-01 12:23:47
有一个Robot Framework扩展支持使用Spring连接测试库,请看:http://code.google.com/p/robotframework-javalibcore/wiki/SpringLibrary
我不能完全确定它是否支持你的情况,因为我对Spring一点也不熟悉。
https://stackoverflow.com/questions/7023452
复制相似问题