在参数化运行期间使用 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
。它使用 title
的 toString()
方法,因此您可以传递任何 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方法时标题在哪里初始化?
从 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
。它使用 title
的 toString()
方法,因此您可以传递任何 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方法时标题在哪里初始化?