All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.wesleyhome.test.jupiter.ArgumentsBuilder Maven / Gradle / Ivy

Go to download

Library to help generate test parameter permutations for parameterized tests in JUnit. This version is an initial attempt to convert to building with Gradle.

There is a newer version: 3.0.0
Show newest version
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 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 build() {
        return StreamSupport.stream(((Iterable) () -> new ParameterPermutationsIterator(arguments, testInstance, dataProviderClasses)).spliterator(), false);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy