我们的项目中有很多旧的柑橘xml测试用例和模板。升级到更新版本后,我决定切换到Java DSL。是否可以继续使用旧模板?如果我尝试这样做,我得到一个“没有bean名为..已定义”的例外。
我尝试通过@ImportResource导入模板文件,但没有成功。
答案 0 :(得分:1)
您可以编写一个简单的自定义测试操作来加载模板并使用当前测试上下文执行它:
在templates/hello-template.xml
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.citrusframework.org/schema/testcase http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd">
<template name="helloTemplate">
<echo>
<message>Hello ${user}</message>
</echo>
</template>
</spring:beans>
您可以编写自定义测试操作来加载该模板:
public class TemplateTest extends TestNGCitrusTestRunner {
@Test
@CitrusTest
public void test() {
run(new CallTemplateAction("templates/hello-template.xml", "helloTemplate"));
}
private class CallTemplateAction extends AbstractTestAction {
private final String templateName;
private final String templateLocation;
public CallTemplateAction(String templateLocation, String templateName) {
this.templateLocation = templateLocation;
this.templateName = templateName;
}
@Override
public void doExecute(TestContext testContext) {
Template template = new ClassPathXmlApplicationContext(new String[] { templateLocation },
testContext.getApplicationContext())
.getBean(templateName, Template.class);
template.getParameter().put("user", "foo");
template.execute(testContext);
}
}
}
完成操作后,您应该缓存模板实例和/或关闭应用程序上下文。