1

プロジェクトには、古い柑橘類の xml テストケースとテンプレートがたくさんあります。新しいバージョンにアップグレードした後、Java DSL に切り替えることにしました。古いテンプレートを使い続けることはできますか?そうしようとすると、「..という名前のBeanが定義されていません」という例外が発生します。

@ImportResource を介してテンプレート ファイルをインポートしようとしましたが、成功しませんでした。

4

1 に答える 1

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);
        }
    }
}

アクションが完了したら、おそらくテンプレート インスタンスをキャッシュするか、アプリケーション コンテキストを閉じる必要があります。

于 2018-02-23T20:37:02.267 に答える