diff --git a/allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java b/allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java index 8b785649..d22dea7e 100644 --- a/allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java +++ b/allure-junit5/src/main/java/io/qameta/allure/junit5/AllureJunit5.java @@ -28,6 +28,7 @@ import java.lang.reflect.Parameter; import java.util.HashMap; import java.util.Map; +import java.util.List; import java.util.Objects; import java.util.Optional; import java.util.UUID; @@ -62,15 +63,20 @@ public void interceptTestTemplateMethod(final Invocation invocation, private void sendParameterEvent(final ReflectiveInvocationContext invocationContext, final ExtensionContext extensionContext) { final Parameter[] parameters = invocationContext.getExecutable().getParameters(); - for (int i = 0; i < parameters.length; i++) { - final Parameter parameter = parameters[i]; + final List arguments = invocationContext.getArguments(); + int argumentIndex = 0; + for (final Parameter parameter : parameters) { final Class parameterType = parameter.getType(); - // Skip default jupiter injectables as TestInfo, TestReporter and TempDirectory - if (parameterType.getCanonicalName().startsWith("org.junit.jupiter.api")) { + + // Skip JUnit injectables AND synthetic parameters + if (parameterType.getCanonicalName().startsWith("org.junit.jupiter.api") + || parameter.isSynthetic() + || argumentIndex >= arguments.size()) { continue; } - final Object value = invocationContext.getArguments().get(i); + + final Object value = arguments.get(argumentIndex++); final Map map = new HashMap<>(); map.put(ALLURE_PARAMETER, parameter.getName()); map.put(ALLURE_PARAMETER_VALUE_KEY, ObjectUtils.toString(value));