在参数化运行期间使用 Test @Title 更改的宁静

Serenity with Test @Title change during parameterized runs

从 Program Creek 的 net.thucydides 示例资源中,我找到了一个更改 JUnit class 中测试名称的解决方案,但它不起作用。我的报告中仍然有一个测试名称(如图link)

Only 1 Test

我的最终目标是 运行 多次相同的 Maven-Serenity JUnit 测试并报告由来自名为 "testCase" 的 spreadSheetData 的参数提供的唯一测试名称 也许我的解决方案根本没有改变,希望我想要的很清楚。

有人可以帮助我前进吗?

我的代码片段如下:

@RunWith(SerenityParameterizedRunner.class)
public class STP_Offer_Flow_Test {
...

public static Collection<Object[]> spreadsheetData() throws IOException {
    InputStream spreadsheet = new FileInputStream("src/test/resources/testdata.xlsx");
    return new SpreadsheetData(spreadsheet, null).getData();

...

public class AnnotatedDataDrivenScenario
{
    private String name;
    @Qualifier
    public String getQualifier()
    {
        return name;
    }
    public String getName()
    {
        return name;
    }
    public void setName(String name)
    {
        this.name = name;
    }
}


@Test
public void STP_Offer_Flow_Basic() throws Throwable {

    log.info(testCase);
    log.info("applicantID = " + applicantID);

    AnnotatedDataDrivenScenario testCaseAnnotation = new AnnotatedDataDrivenScenario();
    testCaseAnnotation.setName(testCase);

...
}

一种方法是:

@Test
@Title("{0}")
public void myTestMethod(String title){
   ...
}

这样做是将 title 放入 @Title。它使用 titletoString() 方法,因此您可以传递任何 object 只要它是 toString() 方法 returns 任何构成标题的内容 (/String) .

你可以做更多,例如:

@Test
@Title("Test Case no. {1} project {0}.")
public void myTest(Project project, int testCaseNo){
   ...
}

标题会这样写:

Test Case no. 3 project MyProject.


EDIT 从头开始​​,此解决方案仅适用于 Serenity 的 @Step 而不是与 JUnit 测试方法一起使用的 @Title 。那些不需要传递任何参数。

我只看到一种解决方案,那就是JUnit 5 Dynamic Test。还不确定 Serenity BDD 会如何。如果您有机会对此进行测试,请告诉我。如果我也有任何经验,我会再次编辑这个答案。

Delorean,感谢您的回答,我正在考虑解决方案,但我不知道如何调用 JUnit 测试。调用myTest方法时标题在哪里初始化?