com.wesleyhome.test.jupiter.ArgumentsBuilder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit-jupiter-params-generated Show documentation
Show all versions of junit-jupiter-params-generated Show documentation
Library to help generate test parameter permutations for parameterized tests in JUnit.
This version is an initial attempt to convert to building with Gradle.
package com.wesleyhome.test.jupiter;
import com.wesleyhome.common.utilities.ReflectionHelper;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.provider.Arguments;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
public class ArgumentsBuilder {
private final List> arguments;
private final Object testInstance;
private final List> dataProviderClasses;
static ArgumentsBuilder create(Object testInstance, Class> firstArgument) {
return new ArgumentsBuilder(testInstance, firstArgument, new ArrayList<>());
}
static Stream extends Arguments> create(ExtensionContext extensionContext) {
Method requiredTestMethod = extensionContext.getRequiredTestMethod();
Class> requiredTestClass = extensionContext.getRequiredTestClass();
Object testInstance = ReflectionHelper.invokeConstructor(requiredTestClass);
Class>[] dataProviderClasses = requiredTestMethod.getAnnotation(ParametersSource.class).value();
Class>[] parameterTypes = requiredTestMethod.getParameterTypes();
List> dataProviderList = Stream.concat(Stream.of(requiredTestClass), Stream.of(dataProviderClasses))
.collect(Collectors.toList());
ArgumentsBuilder builder = new ArgumentsBuilder(testInstance, dataProviderList);
Stream.of(parameterTypes)
.forEach(builder::arg);
return builder.build();
}
private ArgumentsBuilder(Object testInstance, final List> dataProviderClasses) {
this.testInstance = testInstance;
this.dataProviderClasses = dataProviderClasses;
this.arguments = new ArrayList<>();
}
private ArgumentsBuilder(Object testInstance, Class> firstArgument, final List> dataProviderClasses) {
this.testInstance = testInstance;
this.dataProviderClasses = dataProviderClasses;
this.arguments = new ArrayList<>();
this.arguments.add(firstArgument);
}
private ArgumentsBuilder arg(Class> argument) {
this.arguments.add(argument);
return this;
}
public Stream extends Arguments> build() {
return StreamSupport.stream(((Iterable) () -> new ParameterPermutationsIterator(arguments, testInstance, dataProviderClasses)).spliterator(), false);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy