
org.testcontainers.junit.jupiter.TestcontainersExtension Maven / Gradle / Ivy
// Generated by delombok at Sun Jul 07 07:15:48 UTC 2019
package org.testcontainers.junit.jupiter;
import org.junit.jupiter.api.extension.*;
import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
import org.junit.jupiter.api.extension.ExtensionContext.Store.CloseableResource;
import org.junit.platform.commons.support.AnnotationSupport;
import org.junit.platform.commons.util.Preconditions;
import org.junit.platform.commons.util.ReflectionUtils;
import org.testcontainers.lifecycle.Startable;
import java.lang.reflect.Field;
import java.util.LinkedHashSet;
import java.util.Optional;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Stream;
class TestcontainersExtension implements BeforeEachCallback, BeforeAllCallback, TestInstancePostProcessor {
private static final Namespace NAMESPACE = Namespace.create(TestcontainersExtension.class);
private static final String TEST_INSTANCE = "testInstance";
@Override
public void postProcessTestInstance(final Object testInstance, final ExtensionContext context) {
ExtensionContext.Store store = context.getStore(NAMESPACE);
store.put(TEST_INSTANCE, testInstance);
}
@Override
public void beforeAll(ExtensionContext context) {
Class> testClass = context.getTestClass().orElseThrow(() -> new ExtensionConfigurationException("TestcontainersExtension is only supported for classes."));
ExtensionContext.Store store = context.getStore(NAMESPACE);
findSharedContainers(testClass).forEach(adapter -> store.getOrComputeIfAbsent(adapter.getKey(), k -> adapter.start()));
}
@Override
public void beforeEach(final ExtensionContext context) {
collectParentTestInstances(context).parallelStream().flatMap(this::findRestartContainers).forEach(adapter -> context.getStore(NAMESPACE).getOrComputeIfAbsent(adapter.getKey(), k -> adapter.start()));
}
private Set
© 2015 - 2025 Weber Informatics LLC | Privacy Policy