I’m using Junit 5 parametrized tests with custom name as follow
JavaScript
x
@ParameterizedTest(name = PARAMETERIZED_TESTS_NAME_PLACEHOLDER)
where PARAMETERIZED_TESTS_NAME_PLACEHOLDER
is defined in its own utility class
JavaScript
public static final String PARAMETERIZED_TESTS_NAME_PLACEHOLDER = "#{index} [{argumentsWithNames}]";
the problem I’m facing is that as I’m using extensively the parametrized tests, my code is cluttered by these @ParameterizedTest(name = PARAMETERIZED_TESTS_NAME_PLACEHOLDER)
.
so I created a custom annotation to fix this
JavaScript
import java.lang.annotation.*;
import org.junit.jupiter.params.*;
@ParameterizedTest(name = PARAMETERIZED_TESTS_NAME_PLACEHOLDER)
@Inherited
public @interface CustomParametrizedTest {
}
but this annotation is ignored when I use it in the test cases
any help would be appreciated
Advertisement
Answer
The @ParamterizedTest
annotation appears to have a retention policy of runtime suggesting it’s needed and processed at runtime. Try this config
JavaScript
@ParameterizedTest(name = PARAMETERIZED_TESTS_NAME_PLACEHOLDER)
@Retention(RetentionPolicy.RUNTIME)
@Inherited
public @interface CustomParametrizedTest {
}
It seems odd to me that this is not the default retention policy for custom annotations, see more from this post.