Skip to content
Advertisement

junit 5 custom parametrized tests

I’m using Junit 5 parametrized tests with custom name as follow

    @ParameterizedTest(name = PARAMETERIZED_TESTS_NAME_PLACEHOLDER)

where PARAMETERIZED_TESTS_NAME_PLACEHOLDER is defined in its own utility class

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

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

@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.

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement