Skip to content

Commit 34ff544

Browse files
committed
GH-1090 - ModuleTestExecution now uses ApplicationModulesFactory to bootstrap ApplicationModules.
This allows running tests against it and see application modules located in test sources.
1 parent ec0e2c7 commit 34ff544

File tree

3 files changed

+37
-1
lines changed

3 files changed

+37
-1
lines changed

spring-modulith-test/src/main/java/org/springframework/modulith/test/ModuleContextCustomizerFactory.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,15 @@ public void customizeContext(ConfigurableApplicationContext context, MergedConte
9292
context.addApplicationListener(events);
9393
}
9494

95+
/**
96+
* Returns the underlying initialized {@link ModuleTestExecution}.
97+
*
98+
* @return will never be {@literal null}.
99+
*/
100+
ModuleTestExecution getExecution() {
101+
return execution.get();
102+
}
103+
95104
private static void logModules(ModuleTestExecution execution) {
96105

97106
var module = execution.getModule();

spring-modulith-test/src/main/java/org/springframework/modulith/test/ModuleTestExecution.java

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@
3131
import org.springframework.boot.autoconfigure.SpringBootApplication;
3232
import org.springframework.boot.test.context.AnnotatedClassFinder;
3333
import org.springframework.core.annotation.AnnotatedElementUtils;
34+
import org.springframework.core.io.support.SpringFactoriesLoader;
3435
import org.springframework.modulith.core.ApplicationModule;
3536
import org.springframework.modulith.core.ApplicationModules;
37+
import org.springframework.modulith.core.ApplicationModulesFactory;
3638
import org.springframework.modulith.core.JavaPackage;
3739
import org.springframework.modulith.test.ApplicationModuleTest.BootstrapMode;
3840
import org.springframework.util.ObjectUtils;
@@ -46,10 +48,19 @@
4648
public class ModuleTestExecution implements Iterable<ApplicationModule> {
4749

4850
private static final Logger LOGGER = LoggerFactory.getLogger(ModuleTestExecution.class);
51+
private static final ApplicationModulesFactory BOOTSTRAP;
4952

5053
private static Map<Class<?>, Class<?>> MODULITH_TYPES = new HashMap<>();
5154
private static Map<Key, ModuleTestExecution> EXECUTIONS = new HashMap<>();
5255

56+
static {
57+
58+
var factories = SpringFactoriesLoader.loadFactories(ApplicationModulesFactory.class,
59+
ModuleTestExecution.class.getClassLoader());
60+
61+
BOOTSTRAP = !factories.isEmpty() ? factories.get(0) : ApplicationModulesFactory.defaultFactory();
62+
}
63+
5364
private final Key key;
5465

5566
private final BootstrapMode bootstrapMode;
@@ -98,7 +109,7 @@ public static Supplier<ModuleTestExecution> of(Class<?> type) {
98109

99110
var annotation = AnnotatedElementUtils.findMergedAnnotation(type, ApplicationModuleTest.class);
100111
var packageName = type.getPackage().getName();
101-
var modules = ApplicationModules.of(findSpringBootApplicationByClasses(annotation, type));
112+
var modules = BOOTSTRAP.of(findSpringBootApplicationByClasses(annotation, type));
102113
var moduleName = annotation.module();
103114

104115
var module = StringUtils.hasText(moduleName)

spring-modulith-test/src/test/java/org/springframework/modulith/test/ModuleContextCustomizerUnitTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,11 @@
1717

1818
import static org.assertj.core.api.Assertions.*;
1919

20+
import example.module.SampleTestA;
21+
2022
import org.junit.jupiter.api.Test;
23+
import org.springframework.modulith.core.ApplicationModule;
24+
import org.springframework.modulith.core.ApplicationModuleIdentifier;
2125
import org.springframework.modulith.test.ModuleContextCustomizerFactory.ModuleContextCustomizer;
2226

2327
/**
@@ -37,4 +41,16 @@ void instancesForSameTargetTypeAreEqual() {
3741
assertThat(right).isEqualTo(left);
3842
assertThat(left).hasSameHashCodeAs(right);
3943
}
44+
45+
@Test // GH-1090
46+
void usesTestClassIfConfigured() {
47+
48+
var customizer = new ModuleContextCustomizer(SampleTestA.class);
49+
var execution = customizer.getExecution();
50+
51+
assertThat(execution.getModule())
52+
.extracting(ApplicationModule::getIdentifier)
53+
.extracting(ApplicationModuleIdentifier::toString)
54+
.isEqualTo("module");
55+
}
4056
}

0 commit comments

Comments
 (0)