GH-1091 - ModuleTestExecution now uses ApplicationModulesFactory to bootstrap ApplicationModules.
This allows running tests against it and see application modules located in test sources.
This commit is contained in:
@@ -92,6 +92,15 @@ class ModuleContextCustomizerFactory implements ContextCustomizerFactory {
|
||||
context.addApplicationListener(events);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the underlying initialized {@link ModuleTestExecution}.
|
||||
*
|
||||
* @return will never be {@literal null}.
|
||||
*/
|
||||
ModuleTestExecution getExecution() {
|
||||
return execution.get();
|
||||
}
|
||||
|
||||
private static void logModules(ModuleTestExecution execution) {
|
||||
|
||||
var module = execution.getModule();
|
||||
|
||||
@@ -31,8 +31,10 @@ import org.slf4j.LoggerFactory;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.boot.test.context.AnnotatedClassFinder;
|
||||
import org.springframework.core.annotation.AnnotatedElementUtils;
|
||||
import org.springframework.core.io.support.SpringFactoriesLoader;
|
||||
import org.springframework.modulith.core.ApplicationModule;
|
||||
import org.springframework.modulith.core.ApplicationModules;
|
||||
import org.springframework.modulith.core.ApplicationModulesFactory;
|
||||
import org.springframework.modulith.core.JavaPackage;
|
||||
import org.springframework.modulith.test.ApplicationModuleTest.BootstrapMode;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
@@ -46,10 +48,19 @@ import org.springframework.util.function.SingletonSupplier;
|
||||
public class ModuleTestExecution implements Iterable<ApplicationModule> {
|
||||
|
||||
private static final Logger LOGGER = LoggerFactory.getLogger(ModuleTestExecution.class);
|
||||
private static final ApplicationModulesFactory BOOTSTRAP;
|
||||
|
||||
private static Map<Class<?>, Class<?>> MODULITH_TYPES = new HashMap<>();
|
||||
private static Map<Key, ModuleTestExecution> EXECUTIONS = new HashMap<>();
|
||||
|
||||
static {
|
||||
|
||||
var factories = SpringFactoriesLoader.loadFactories(ApplicationModulesFactory.class,
|
||||
ModuleTestExecution.class.getClassLoader());
|
||||
|
||||
BOOTSTRAP = !factories.isEmpty() ? factories.get(0) : ApplicationModulesFactory.defaultFactory();
|
||||
}
|
||||
|
||||
private final Key key;
|
||||
|
||||
private final BootstrapMode bootstrapMode;
|
||||
@@ -98,7 +109,7 @@ public class ModuleTestExecution implements Iterable<ApplicationModule> {
|
||||
|
||||
var annotation = AnnotatedElementUtils.findMergedAnnotation(type, ApplicationModuleTest.class);
|
||||
var packageName = type.getPackage().getName();
|
||||
var modules = ApplicationModules.of(findSpringBootApplicationByClasses(annotation, type));
|
||||
var modules = BOOTSTRAP.of(findSpringBootApplicationByClasses(annotation, type));
|
||||
var moduleName = annotation.module();
|
||||
|
||||
var module = StringUtils.hasText(moduleName)
|
||||
|
||||
@@ -17,7 +17,11 @@ package org.springframework.modulith.test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.*;
|
||||
|
||||
import example.module.SampleTestA;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.modulith.core.ApplicationModule;
|
||||
import org.springframework.modulith.core.ApplicationModuleIdentifier;
|
||||
import org.springframework.modulith.test.ModuleContextCustomizerFactory.ModuleContextCustomizer;
|
||||
|
||||
/**
|
||||
@@ -37,4 +41,16 @@ class ModuleContextCustomizerUnitTests {
|
||||
assertThat(right).isEqualTo(left);
|
||||
assertThat(left).hasSameHashCodeAs(right);
|
||||
}
|
||||
|
||||
@Test // GH-1090
|
||||
void usesTestClassIfConfigured() {
|
||||
|
||||
var customizer = new ModuleContextCustomizer(SampleTestA.class);
|
||||
var execution = customizer.getExecution();
|
||||
|
||||
assertThat(execution.getModule())
|
||||
.extracting(ApplicationModule::getIdentifier)
|
||||
.extracting(ApplicationModuleIdentifier::toString)
|
||||
.isEqualTo("module");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user