Tl;dr;
1. (main question) Is is possible to set custom column names in parametrised test?
2. (just noticed, while was wrinting this post) When some parameter equals to previous parameter scenario outline show first parameter number
1.
junit parametrised runner allow to set custom column names
http://junit.org/junit5/docs/current/user-guide/#writing-tests-parameterized-tests-display-names. From net.thucydides.junit.annotations.TestData (currently i'm using serenity version 1.5.4-rc1) it looks like serenity should also provide same functionality. But it looks strange. Tried to find out correct syntax:
@TestData(columnNames = "{Index}: p0_column_name({0}) p1_column_name({1}) p2_column_name({2}) p3_column_name({3})")
public static Collection<Object[]> testData() {
…
}
@Parameterized.Parameter
private String parameter0;
@Parameterized.Parameter(1)
private String parameter1;
@TestData(columnNames = "{Index}: p0_column_name({0}) p1_column_name({1}) p2_column_name({2}) p3_column_name({3})")
public static Collection<Object[]> testData() {
…
}
@TestData(columnNames = "p0_column_name p1_column_name p2_column_name p3_column_name")
public static Collection<Object[]> testData() {
…
}
@TestData(columnNames = "p0_column_name#0 p1_column_name#1 p2_column_name#2 p3_column_name#3")
public static Collection<Object[]> testData() {
…
}
@TestData(columnNames = "p0_column_name{0} p1_column_name{1} p2_column_name{2} p3_column_name{3}")
public static Collection<Object[]> testData() {
…
}
Every time command line show that test passed but build fail
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-failsafe-plugin:2.20:verify (default) on project mbp-tests: There are test failures.
[ERROR] Please refer to …\target\failsafe-reports for the individual test results.
[ERROR] Please refer to dump files (if any exist) [date]-jvmRun[N].dump, [date].dumpstream and [date]-jvmRun[N].dumpstream.
[ERROR] org.apache.maven.surefire.booter.SurefireBooterForkException: There was an error in the forked process
[ERROR] Test mechanism :: Index: 1, Size: 1
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:665)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:533)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:279)
[ERROR] at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:243)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:1077)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:907)
[ERROR] at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:785)
[ERROR] at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:154)
[ERROR] at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:146)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:117)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:81)
[ERROR] at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
[ERROR] at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:309)
[ERROR] at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:194)
[ERROR] at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:107)
[ERROR] at org.apache.maven.cli.MavenCli.execute(MavenCli.java:993)
[ERROR] at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:345)
[ERROR] at org.apache.maven.cli.MavenCli.main(MavenCli.java:191)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[ERROR] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
[ERROR] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[ERROR] at java.lang.reflect.Method.invoke(Method.java:498)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
[ERROR] at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
and report looks broken

when @TestData don't have parameter buld succesful and report show columns
2.
Let's say i have parametrised test with 3 parameters (3 strings):
{aaa, bbb, aaa}
{111, 222, 333}
given that … «parameter1»
when … «parameter2»
then … «parameter3»
in first case parameter1 equals parameter3. Scenario ouline block will show «then … (<Parameter 1>)» instead of «then … (<Parameter 3>)» is it ok?