@Rule @Before 和@After 中的 JUnit 参数

JUnit parameter in @Rule @Before and @After

我需要有关如何在所有测试方法中实施以下代码段的建议。

@Test 
public void testCatalogItemUpdate() {
    String correlationId = getCorrelation();
    try {
        parallel().actions( 
         //use correlationId
         //invoke test scenario
         //assert results
    );

    } finally {
        print(correlationId);
    }
}

我阅读了有关@Rule 和@Before 以及@After 注释的内容。

如果您需要在测试开始或结束时执行这些操作,您可以尝试使用那些 BeforeTest 或 AfterTest 组件。我不确定您是否可以在这些部分中调用 Citrus 测试,但您可以尝试。下面是 before test 的用法示例(您需要将其添加到 citrus-context 文件):

<citrus:before-test id="defaultBeforeTest">
    <citrus:actions>
        <citrus-test:java class="<class path and class name to be here" >
            <citrus-test:method name="<method name>" >
                <citrus-test:argument>${<if any variable should be passed>}</citrus-test:argument>
                <citrus-test:argument>1</citrus-test:argument>
            </citrus-test:method>
        </citrus-test:java>
        <!-- access to Citrus method  -->
        <citrus-test:purge-channel>
            <citrus-test:channel name="<server_name>.inbound"/>
        </citrus-test:purge-channel>
    </citrus:actions>
</citrus:before-test>

您还可以查看 Citrus 中的模板 (http://www.citrusframework.org/reference/html/templates.html),尤其是当您需要 运行 测试用例中间的代码时。

我无法发表评论,因为我没有足够的分数,所以我试图根据我的理解给出解决方案。因此,请澄清一件事,您在参数部分添加了注释,如下所示

parallel().action(/*test scenario and assert results are here*/);

有什么具体原因吗?

这是代码片段。请检查是否有帮助

private String correlationId;
@Before
public void beforeEachTest(){
    correlationId = getCorrelation();
    parallel().actions(correlationId);
}

@Test
public void testCatalogItemUpdate(){
    //Execute test scenario using correlationId
    //Assert results
}

@After
public void afterEachTest(){
    print(correlationId);
}

您可以在 Citrus

中使用 BeforeTestSupport classes

您应该扩展 BeforeTestSupport classes 并将它们添加到 Spring 应用程序上下文:

public class MyBeforeTest extends TestDesignerBeforeTestSupport {
    @Override
    public void beforeTest(TestDesigner designer) {
        designer.echo("This action should be executed before suite");
    }
}

<bean id="myBeforeTest" class="my.company.citrus.MyBeforeTest"/>

beforeTest 方法随测试设计器实例一起提供,然后能够接收 Citrus 中的 Java DSL 调用。当然,您也可以将测试运行器替代方案与相应的基础 TestRunnerBeforeTestSupport class.

一起使用