Skip to content

Commit

Permalink
Introduce JupiterConfiguration interface
Browse files Browse the repository at this point in the history
The new interface wraps around `ConfigurationParameters` instances and
provides access to as well as conversion for well-known configuration
parameters used by within the Jupiter engine.
  • Loading branch information
marcphilipp committed Dec 3, 2018
1 parent 916dc35 commit d91e682
Show file tree
Hide file tree
Showing 51 changed files with 534 additions and 408 deletions.
Expand Up @@ -18,10 +18,8 @@
import static org.junit.platform.engine.support.hierarchical.DefaultParallelExecutionConfigurationStrategy.CONFIG_STRATEGY_PROPERTY_NAME; import static org.junit.platform.engine.support.hierarchical.DefaultParallelExecutionConfigurationStrategy.CONFIG_STRATEGY_PROPERTY_NAME;


import org.apiguardian.api.API; import org.apiguardian.api.API;
import org.junit.jupiter.engine.descriptor.ExecutionModeUtils; import org.junit.jupiter.engine.config.JupiterConfiguration;
import org.junit.jupiter.engine.descriptor.TestInstanceLifecycleUtils;
import org.junit.jupiter.engine.execution.ConditionEvaluator; import org.junit.jupiter.engine.execution.ConditionEvaluator;
import org.junit.jupiter.engine.extension.ExtensionRegistry;
import org.junit.platform.engine.support.hierarchical.ParallelExecutionConfigurationStrategy; import org.junit.platform.engine.support.hierarchical.ParallelExecutionConfigurationStrategy;


/** /**
Expand Down Expand Up @@ -63,7 +61,7 @@ public final class Constants {
* @see #DEACTIVATE_ALL_CONDITIONS_PATTERN * @see #DEACTIVATE_ALL_CONDITIONS_PATTERN
* @see org.junit.jupiter.api.extension.ExecutionCondition * @see org.junit.jupiter.api.extension.ExecutionCondition
*/ */
public static final String DEACTIVATE_CONDITIONS_PATTERN_PROPERTY_NAME = ConditionEvaluator.DEACTIVATE_CONDITIONS_PATTERN_PROPERTY_NAME; public static final String DEACTIVATE_CONDITIONS_PATTERN_PROPERTY_NAME = JupiterConfiguration.DEACTIVATE_CONDITIONS_PATTERN_PROPERTY_NAME;


/** /**
* Wildcard pattern which signals that all conditions should be deactivated: {@value} * Wildcard pattern which signals that all conditions should be deactivated: {@value}
Expand All @@ -79,7 +77,7 @@ public final class Constants {
* *
* <p>The default behavior is not to perform auto-detection. * <p>The default behavior is not to perform auto-detection.
*/ */
public static final String EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME = ExtensionRegistry.EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME; public static final String EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME = JupiterConfiguration.EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME;


/** /**
* Property name used to set the default test instance lifecycle mode: {@value} * Property name used to set the default test instance lifecycle mode: {@value}
Expand All @@ -94,7 +92,7 @@ public final class Constants {
* *
* @see org.junit.jupiter.api.TestInstance * @see org.junit.jupiter.api.TestInstance
*/ */
public static final String DEFAULT_TEST_INSTANCE_LIFECYCLE_PROPERTY_NAME = TestInstanceLifecycleUtils.DEFAULT_TEST_INSTANCE_LIFECYCLE_PROPERTY_NAME; public static final String DEFAULT_TEST_INSTANCE_LIFECYCLE_PROPERTY_NAME = JupiterConfiguration.DEFAULT_TEST_INSTANCE_LIFECYCLE_PROPERTY_NAME;


/** /**
* Property name used to enable parallel test execution: {@value} * Property name used to enable parallel test execution: {@value}
Expand All @@ -104,7 +102,7 @@ public final class Constants {
* @since 5.3 * @since 5.3
*/ */
@API(status = EXPERIMENTAL, since = "5.3") @API(status = EXPERIMENTAL, since = "5.3")
public static final String PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME = "junit.jupiter.execution.parallel.enabled"; public static final String PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME = JupiterConfiguration.PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME;


/** /**
* Property name used to set the default parallel test execution mode: {@value} * Property name used to set the default parallel test execution mode: {@value}
Expand All @@ -124,7 +122,7 @@ public final class Constants {
* @since 5.4 * @since 5.4
*/ */
@API(status = EXPERIMENTAL, since = "5.4") @API(status = EXPERIMENTAL, since = "5.4")
public static final String DEFAULT_PARALLEL_EXECUTION_MODE = ExecutionModeUtils.DEFAULT_EXECUTION_MODE_PROPERTY_NAME; public static final String DEFAULT_PARALLEL_EXECUTION_MODE = JupiterConfiguration.DEFAULT_EXECUTION_MODE_PROPERTY_NAME;


static final String PARALLEL_CONFIG_PREFIX = "junit.jupiter.execution.parallel.config."; static final String PARALLEL_CONFIG_PREFIX = "junit.jupiter.execution.parallel.config.";


Expand Down
Expand Up @@ -15,11 +15,12 @@
import java.util.Optional; import java.util.Optional;


import org.apiguardian.api.API; import org.apiguardian.api.API;
import org.junit.jupiter.engine.config.DefaultJupiterConfiguration;
import org.junit.jupiter.engine.config.JupiterConfiguration;
import org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor; import org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor;
import org.junit.jupiter.engine.discovery.DiscoverySelectorResolver; import org.junit.jupiter.engine.discovery.DiscoverySelectorResolver;
import org.junit.jupiter.engine.execution.JupiterEngineExecutionContext; import org.junit.jupiter.engine.execution.JupiterEngineExecutionContext;
import org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory; import org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory;
import org.junit.platform.engine.ConfigurationParameters;
import org.junit.platform.engine.EngineDiscoveryRequest; import org.junit.platform.engine.EngineDiscoveryRequest;
import org.junit.platform.engine.ExecutionRequest; import org.junit.platform.engine.ExecutionRequest;
import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestDescriptor;
Expand Down Expand Up @@ -61,26 +62,27 @@ public Optional<String> getArtifactId() {


@Override @Override
public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId uniqueId) { public TestDescriptor discover(EngineDiscoveryRequest discoveryRequest, UniqueId uniqueId) {
JupiterEngineDescriptor engineDescriptor = new JupiterEngineDescriptor(uniqueId, JupiterConfiguration configuration = new DefaultJupiterConfiguration(
discoveryRequest.getConfigurationParameters()); discoveryRequest.getConfigurationParameters());
new DiscoverySelectorResolver().resolveSelectors(discoveryRequest, engineDescriptor); JupiterEngineDescriptor engineDescriptor = new JupiterEngineDescriptor(uniqueId, configuration);
new DiscoverySelectorResolver().resolveSelectors(discoveryRequest, configuration, engineDescriptor);
return engineDescriptor; return engineDescriptor;
} }


@Override @Override
protected HierarchicalTestExecutorService createExecutorService(ExecutionRequest request) { protected HierarchicalTestExecutorService createExecutorService(ExecutionRequest request) {
ConfigurationParameters config = request.getConfigurationParameters(); JupiterConfiguration configuration = getJupiterConfiguration(request);
if (config.getBoolean(Constants.PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME).orElse(false)) { if (configuration.isParallelExecutionEnabled()) {
return new ForkJoinPoolHierarchicalTestExecutorService( return new ForkJoinPoolHierarchicalTestExecutorService(new PrefixedConfigurationParameters(
new PrefixedConfigurationParameters(config, Constants.PARALLEL_CONFIG_PREFIX)); request.getConfigurationParameters(), Constants.PARALLEL_CONFIG_PREFIX));
} }
return super.createExecutorService(request); return super.createExecutorService(request);
} }


@Override @Override
protected JupiterEngineExecutionContext createExecutionContext(ExecutionRequest request) { protected JupiterEngineExecutionContext createExecutionContext(ExecutionRequest request) {
return new JupiterEngineExecutionContext(request.getEngineExecutionListener(), return new JupiterEngineExecutionContext(request.getEngineExecutionListener(),
request.getConfigurationParameters()); getJupiterConfiguration(request));
} }


/** /**
Expand All @@ -91,4 +93,9 @@ protected ThrowableCollector.Factory createThrowableCollectorFactory(ExecutionRe
return JupiterThrowableCollectorFactory::createThrowableCollector; return JupiterThrowableCollectorFactory::createThrowableCollector;
} }


private JupiterConfiguration getJupiterConfiguration(ExecutionRequest request) {
JupiterEngineDescriptor engineDescriptor = (JupiterEngineDescriptor) request.getRootTestDescriptor();
return engineDescriptor.getConfiguration();
}

} }
@@ -0,0 +1,72 @@
/*
* Copyright 2015-2018 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v2.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v20.html
*/

package org.junit.jupiter.engine.config;

import static org.apiguardian.api.API.Status.INTERNAL;

import java.util.Optional;

import org.apiguardian.api.API;
import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.junit.jupiter.api.parallel.ExecutionMode;
import org.junit.platform.commons.util.Preconditions;
import org.junit.platform.commons.util.StringUtils;
import org.junit.platform.engine.ConfigurationParameters;

@API(status = INTERNAL, since = "5.4")
public class DefaultJupiterConfiguration implements JupiterConfiguration {

private final ConfigurationParameters configurationParameters;

public DefaultJupiterConfiguration(ConfigurationParameters configurationParameters) {
this.configurationParameters = Preconditions.notNull(configurationParameters,
"ConfigurationParameters must not be null");
}

@Override
public Optional<String> getRawConfigurationParameter(String key) {
return configurationParameters.get(key);
}

@Override
public boolean isParallelExecutionEnabled() {
return configurationParameters.getBoolean(PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME).orElse(false);
}

@Override
public boolean isExtensionAutoDetectionEnabled() {
return configurationParameters.getBoolean(EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME).orElse(false);
}

@Override
public ExecutionMode getDefaultExecutionMode() {
EnumConfigurationParameterConverter<ExecutionMode> converter = new EnumConfigurationParameterConverter<>(
ExecutionMode.class, "parallel execution mode");
return converter.get(configurationParameters, DEFAULT_EXECUTION_MODE_PROPERTY_NAME, ExecutionMode.SAME_THREAD);
}

@Override
public Lifecycle getDefaultTestInstanceLifecycle() {
EnumConfigurationParameterConverter<Lifecycle> converter = new EnumConfigurationParameterConverter<>(
Lifecycle.class, "test instance lifecycle mode");
return converter.get(configurationParameters, DEFAULT_TEST_INSTANCE_LIFECYCLE_PROPERTY_NAME,
Lifecycle.PER_METHOD);
}

@Override
public Optional<String> getDeactivateExecutionConditionsPattern() {
// @formatter:off
return configurationParameters.get(DEACTIVATE_CONDITIONS_PATTERN_PROPERTY_NAME)
.filter(StringUtils::isNotBlank)
.map(String::trim);
// @formatter:on
}
}
Expand Up @@ -8,7 +8,7 @@
* http://www.eclipse.org/legal/epl-v20.html * http://www.eclipse.org/legal/epl-v20.html
*/ */


package org.junit.jupiter.engine.descriptor; package org.junit.jupiter.engine.config;


import java.util.Optional; import java.util.Optional;


Expand All @@ -19,7 +19,7 @@


class EnumConfigurationParameterConverter<T extends Enum<T>> { class EnumConfigurationParameterConverter<T extends Enum<T>> {


private static final Logger logger = LoggerFactory.getLogger(TestInstanceLifecycleUtils.class); private static final Logger logger = LoggerFactory.getLogger(EnumConfigurationParameterConverter.class);


private final Class<T> enumType; private final Class<T> enumType;
private final String enumDisplayName; private final String enumDisplayName;
Expand Down
@@ -0,0 +1,42 @@
/*
* Copyright 2015-2018 the original author or authors.
*
* All rights reserved. This program and the accompanying materials are
* made available under the terms of the Eclipse Public License v2.0 which
* accompanies this distribution and is available at
*
* http://www.eclipse.org/legal/epl-v20.html
*/

package org.junit.jupiter.engine.config;

import static org.apiguardian.api.API.Status.INTERNAL;

import java.util.Optional;

import org.apiguardian.api.API;
import org.junit.jupiter.api.TestInstance;
import org.junit.jupiter.api.parallel.ExecutionMode;

@API(status = INTERNAL, since = "5.4")
public interface JupiterConfiguration {

String DEACTIVATE_CONDITIONS_PATTERN_PROPERTY_NAME = "junit.jupiter.conditions.deactivate";
String PARALLEL_EXECUTION_ENABLED_PROPERTY_NAME = "junit.jupiter.execution.parallel.enabled";
String DEFAULT_EXECUTION_MODE_PROPERTY_NAME = "junit.jupiter.execution.parallel.mode.default";
String EXTENSIONS_AUTODETECTION_ENABLED_PROPERTY_NAME = "junit.jupiter.extensions.autodetection.enabled";
String DEFAULT_TEST_INSTANCE_LIFECYCLE_PROPERTY_NAME = "junit.jupiter.testinstance.lifecycle.default";

Optional<String> getRawConfigurationParameter(String key);

boolean isParallelExecutionEnabled();

boolean isExtensionAutoDetectionEnabled();

ExecutionMode getDefaultExecutionMode();

TestInstance.Lifecycle getDefaultTestInstanceLifecycle();

Optional<String> getDeactivateExecutionConditionsPattern();

}
@@ -0,0 +1,5 @@
/**
* Configuration specific to the JUnit Jupiter test engine.
*/

package org.junit.jupiter.engine.config;
Expand Up @@ -20,10 +20,10 @@
import java.util.Set; import java.util.Set;


import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.engine.config.JupiterConfiguration;
import org.junit.jupiter.engine.execution.ExtensionValuesStore; import org.junit.jupiter.engine.execution.ExtensionValuesStore;
import org.junit.jupiter.engine.execution.NamespaceAwareStore; import org.junit.jupiter.engine.execution.NamespaceAwareStore;
import org.junit.platform.commons.util.Preconditions; import org.junit.platform.commons.util.Preconditions;
import org.junit.platform.engine.ConfigurationParameters;
import org.junit.platform.engine.EngineExecutionListener; import org.junit.platform.engine.EngineExecutionListener;
import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestDescriptor;
import org.junit.platform.engine.TestTag; import org.junit.platform.engine.TestTag;
Expand All @@ -38,19 +38,19 @@ abstract class AbstractExtensionContext<T extends TestDescriptor> implements Ext
private final EngineExecutionListener engineExecutionListener; private final EngineExecutionListener engineExecutionListener;
private final T testDescriptor; private final T testDescriptor;
private final Set<String> tags; private final Set<String> tags;
private final ConfigurationParameters configurationParameters; private final JupiterConfiguration configuration;
private final ExtensionValuesStore valuesStore; private final ExtensionValuesStore valuesStore;


AbstractExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener, T testDescriptor, AbstractExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener, T testDescriptor,
ConfigurationParameters configurationParameters) { JupiterConfiguration configuration) {


Preconditions.notNull(testDescriptor, "TestDescriptor must not be null"); Preconditions.notNull(testDescriptor, "TestDescriptor must not be null");
Preconditions.notNull(configurationParameters, "ConfigurationParameters must not be null"); Preconditions.notNull(configuration, "JupiterConfiguration must not be null");


this.parent = parent; this.parent = parent;
this.engineExecutionListener = engineExecutionListener; this.engineExecutionListener = engineExecutionListener;
this.testDescriptor = testDescriptor; this.testDescriptor = testDescriptor;
this.configurationParameters = configurationParameters; this.configuration = configuration;
this.valuesStore = createStore(parent); this.valuesStore = createStore(parent);


// @formatter:off // @formatter:off
Expand Down Expand Up @@ -119,7 +119,7 @@ public Set<String> getTags() {


@Override @Override
public Optional<String> getConfigurationParameter(String key) { public Optional<String> getConfigurationParameter(String key) {
return this.configurationParameters.get(key); return this.configuration.getRawConfigurationParameter(key);
} }


} }
Expand Up @@ -19,7 +19,7 @@
import org.apiguardian.api.API; import org.apiguardian.api.API;
import org.junit.jupiter.api.TestInstance.Lifecycle; import org.junit.jupiter.api.TestInstance.Lifecycle;
import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.platform.engine.ConfigurationParameters; import org.junit.jupiter.engine.config.JupiterConfiguration;
import org.junit.platform.engine.EngineExecutionListener; import org.junit.platform.engine.EngineExecutionListener;
import org.junit.platform.engine.support.hierarchical.ThrowableCollector; import org.junit.platform.engine.support.hierarchical.ThrowableCollector;


Expand All @@ -38,21 +38,20 @@ public final class ClassExtensionContext extends AbstractExtensionContext<ClassT
/** /**
* Create a new {@code ClassExtensionContext} with {@link Lifecycle#PER_METHOD}. * Create a new {@code ClassExtensionContext} with {@link Lifecycle#PER_METHOD}.
* *
* @see #ClassExtensionContext(ExtensionContext, EngineExecutionListener, ClassTestDescriptor, Lifecycle, ConfigurationParameters, ThrowableCollector) * @see #ClassExtensionContext(ExtensionContext, EngineExecutionListener, ClassTestDescriptor, Lifecycle, JupiterConfiguration, ThrowableCollector)
*/ */
public ClassExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener, public ClassExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener,
ClassTestDescriptor testDescriptor, ConfigurationParameters configurationParameters, ClassTestDescriptor testDescriptor, JupiterConfiguration configuration,
ThrowableCollector throwableCollector) { ThrowableCollector throwableCollector) {


this(parent, engineExecutionListener, testDescriptor, Lifecycle.PER_METHOD, configurationParameters, this(parent, engineExecutionListener, testDescriptor, Lifecycle.PER_METHOD, configuration, throwableCollector);
throwableCollector);
} }


public ClassExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener, public ClassExtensionContext(ExtensionContext parent, EngineExecutionListener engineExecutionListener,
ClassTestDescriptor testDescriptor, Lifecycle lifecycle, ConfigurationParameters configurationParameters, ClassTestDescriptor testDescriptor, Lifecycle lifecycle, JupiterConfiguration configuration,
ThrowableCollector throwableCollector) { ThrowableCollector throwableCollector) {


super(parent, engineExecutionListener, testDescriptor, configurationParameters); super(parent, engineExecutionListener, testDescriptor, configuration);


this.lifecycle = lifecycle; this.lifecycle = lifecycle;
this.throwableCollector = throwableCollector; this.throwableCollector = throwableCollector;
Expand Down
Expand Up @@ -43,6 +43,7 @@
import org.junit.jupiter.api.extension.TestInstanceFactory; import org.junit.jupiter.api.extension.TestInstanceFactory;
import org.junit.jupiter.api.extension.TestInstancePostProcessor; import org.junit.jupiter.api.extension.TestInstancePostProcessor;
import org.junit.jupiter.api.extension.TestInstantiationException; import org.junit.jupiter.api.extension.TestInstantiationException;
import org.junit.jupiter.engine.config.JupiterConfiguration;
import org.junit.jupiter.engine.execution.AfterEachMethodAdapter; import org.junit.jupiter.engine.execution.AfterEachMethodAdapter;
import org.junit.jupiter.engine.execution.BeforeEachMethodAdapter; import org.junit.jupiter.engine.execution.BeforeEachMethodAdapter;
import org.junit.jupiter.engine.execution.ExecutableInvoker; import org.junit.jupiter.engine.execution.ExecutableInvoker;
Expand All @@ -53,7 +54,6 @@
import org.junit.platform.commons.util.BlacklistedExceptions; import org.junit.platform.commons.util.BlacklistedExceptions;
import org.junit.platform.commons.util.ReflectionUtils; import org.junit.platform.commons.util.ReflectionUtils;
import org.junit.platform.commons.util.StringUtils; import org.junit.platform.commons.util.StringUtils;
import org.junit.platform.engine.ConfigurationParameters;
import org.junit.platform.engine.TestDescriptor; import org.junit.platform.engine.TestDescriptor;
import org.junit.platform.engine.TestTag; import org.junit.platform.engine.TestTag;
import org.junit.platform.engine.UniqueId; import org.junit.platform.engine.UniqueId;
Expand Down Expand Up @@ -86,17 +86,17 @@ public class ClassTestDescriptor extends JupiterTestDescriptor {
private List<Method> beforeAllMethods; private List<Method> beforeAllMethods;
private List<Method> afterAllMethods; private List<Method> afterAllMethods;


public ClassTestDescriptor(UniqueId uniqueId, Class<?> testClass, ConfigurationParameters configurationParameters) { public ClassTestDescriptor(UniqueId uniqueId, Class<?> testClass, JupiterConfiguration configuration) {
this(uniqueId, testClass, createDisplayNameSupplierForClass(testClass), configurationParameters); this(uniqueId, testClass, createDisplayNameSupplierForClass(testClass), configuration);
} }


ClassTestDescriptor(UniqueId uniqueId, Class<?> testClass, Supplier<String> displayNameSupplier, ClassTestDescriptor(UniqueId uniqueId, Class<?> testClass, Supplier<String> displayNameSupplier,
ConfigurationParameters configurationParameters) { JupiterConfiguration configuration) {
super(uniqueId, testClass, displayNameSupplier, ClassSource.from(testClass), configurationParameters); super(uniqueId, testClass, displayNameSupplier, ClassSource.from(testClass), configuration);


this.testClass = testClass; this.testClass = testClass;
this.tags = getTags(testClass); this.tags = getTags(testClass);
this.lifecycle = getTestInstanceLifecycle(testClass, configurationParameters); this.lifecycle = getTestInstanceLifecycle(testClass, configuration);
this.defaultChildExecutionMode = (this.lifecycle == Lifecycle.PER_CLASS ? ExecutionMode.SAME_THREAD : null); this.defaultChildExecutionMode = (this.lifecycle == Lifecycle.PER_CLASS ? ExecutionMode.SAME_THREAD : null);
} }


Expand Down Expand Up @@ -162,8 +162,7 @@ public JupiterEngineExecutionContext prepare(JupiterEngineExecutionContext conte


ThrowableCollector throwableCollector = createThrowableCollector(); ThrowableCollector throwableCollector = createThrowableCollector();
ClassExtensionContext extensionContext = new ClassExtensionContext(context.getExtensionContext(), ClassExtensionContext extensionContext = new ClassExtensionContext(context.getExtensionContext(),
context.getExecutionListener(), this, this.lifecycle, context.getConfigurationParameters(), context.getExecutionListener(), this, this.lifecycle, context.getConfiguration(), throwableCollector);
throwableCollector);


this.beforeAllMethods = findBeforeAllMethods(this.testClass, this.lifecycle == Lifecycle.PER_METHOD); this.beforeAllMethods = findBeforeAllMethods(this.testClass, this.lifecycle == Lifecycle.PER_METHOD);
this.afterAllMethods = findAfterAllMethods(this.testClass, this.lifecycle == Lifecycle.PER_METHOD); this.afterAllMethods = findAfterAllMethods(this.testClass, this.lifecycle == Lifecycle.PER_METHOD);
Expand Down

0 comments on commit d91e682

Please sign in to comment.