From 94ff5190727f0ff7f2202bff23b8e891f99be904 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Fri, 9 Sep 2022 17:15:54 +0200 Subject: [PATCH] Test JUnit 4, JUnit Jupiter, & TestNG in AotIntegrationTests With this commit we also now assert the number of successfully executed tests. --- .../test/context/aot/AbstractAotTests.java | 30 ++++++++++++ .../test/context/aot/AotIntegrationTests.java | 47 ++++++------------- .../context/aot/TestAotProcessorTests.java | 32 +------------ 3 files changed, 45 insertions(+), 64 deletions(-) diff --git a/spring-test/src/test/java/org/springframework/test/context/aot/AbstractAotTests.java b/spring-test/src/test/java/org/springframework/test/context/aot/AbstractAotTests.java index e1607ce46f..ea98ff704e 100644 --- a/spring-test/src/test/java/org/springframework/test/context/aot/AbstractAotTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/aot/AbstractAotTests.java @@ -29,6 +29,36 @@ import java.util.stream.Stream; */ abstract class AbstractAotTests { + static final String[] expectedSourceFilesForBasicSpringTests = { + // Global + "org/springframework/test/context/aot/TestAotMappings__Generated.java", + // BasicSpringJupiterSharedConfigTests + "org/springframework/context/event/DefaultEventListenerFactory__TestContext001_BeanDefinitions.java", + "org/springframework/context/event/EventListenerMethodProcessor__TestContext001_BeanDefinitions.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_ApplicationContextInitializer.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_BeanFactoryRegistrations.java", + "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext001_BeanDefinitions.java", + // BasicSpringJupiterTests -- not generated b/c already generated for BasicSpringJupiterSharedConfigTests. + // BasicSpringJupiterTests.NestedTests + "org/springframework/context/event/DefaultEventListenerFactory__TestContext002_BeanDefinitions.java", + "org/springframework/context/event/EventListenerMethodProcessor__TestContext002_BeanDefinitions.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_ApplicationContextInitializer.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_BeanFactoryRegistrations.java", + "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext002_BeanDefinitions.java", + // BasicSpringTestNGTests + "org/springframework/context/event/DefaultEventListenerFactory__TestContext003_BeanDefinitions.java", + "org/springframework/context/event/EventListenerMethodProcessor__TestContext003_BeanDefinitions.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringTestNGTests__TestContext003_ApplicationContextInitializer.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringTestNGTests__TestContext003_BeanFactoryRegistrations.java", + "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext003_BeanDefinitions.java", + // BasicSpringVintageTests + "org/springframework/context/event/DefaultEventListenerFactory__TestContext004_BeanDefinitions.java", + "org/springframework/context/event/EventListenerMethodProcessor__TestContext004_BeanDefinitions.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringVintageTests__TestContext004_ApplicationContextInitializer.java", + "org/springframework/test/context/aot/samples/basic/BasicSpringVintageTests__TestContext004_BeanFactoryRegistrations.java", + "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext004_BeanDefinitions.java" + }; + Stream> scan() { return new TestClassScanner(classpathRoots()).scan(); } diff --git a/spring-test/src/test/java/org/springframework/test/context/aot/AotIntegrationTests.java b/spring-test/src/test/java/org/springframework/test/context/aot/AotIntegrationTests.java index 3bda401ee8..61fbfe0e9d 100644 --- a/spring-test/src/test/java/org/springframework/test/context/aot/AotIntegrationTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/aot/AotIntegrationTests.java @@ -40,10 +40,11 @@ import org.springframework.aot.test.generate.compile.CompileWithTargetClassAcces import org.springframework.aot.test.generate.compile.TestCompiler; import org.springframework.test.context.aot.samples.basic.BasicSpringJupiterSharedConfigTests; import org.springframework.test.context.aot.samples.basic.BasicSpringJupiterTests; +import org.springframework.test.context.aot.samples.basic.BasicSpringTestNGTests; +import org.springframework.test.context.aot.samples.basic.BasicSpringVintageTests; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass; -import static org.junit.platform.launcher.EngineFilter.includeEngines; /** * End-to-end integration tests for AOT support in the TestContext framework. @@ -78,10 +79,7 @@ class AotIntegrationTests extends AbstractAotTests { @Test void endToEndTests() { // AOT BUILD-TIME: CLASSPATH SCANNING - Stream> testClasses = createTestClassScanner() - .scan("org.springframework.test.context.aot.samples.basic") - // This test focuses solely on JUnit Jupiter tests - .filter(sourceFile -> sourceFile.getName().contains("Jupiter")); + Stream> testClasses = createTestClassScanner().scan("org.springframework.test.context.aot.samples.basic"); // AOT BUILD-TIME: PROCESSING InMemoryGeneratedFiles generatedFiles = new InMemoryGeneratedFiles(); @@ -89,23 +87,28 @@ class AotIntegrationTests extends AbstractAotTests { generator.processAheadOfTime(testClasses); List sourceFiles = generatedFiles.getGeneratedFiles(Kind.SOURCE).keySet().stream().toList(); - assertThat(sourceFiles).containsExactlyInAnyOrder(expectedSourceFilesForBasicSpringJupiterTests); + assertThat(sourceFiles).containsExactlyInAnyOrder(expectedSourceFilesForBasicSpringTests); // AOT BUILD-TIME: COMPILATION TestCompiler.forSystem().withFiles(generatedFiles) // .printFiles(System.out) .compile(compiled -> // AOT RUN-TIME: EXECUTION - runTestsInAotMode(BasicSpringJupiterTests.class, BasicSpringJupiterSharedConfigTests.class)); + runTestsInAotMode(5, + BasicSpringJupiterSharedConfigTests.class, + BasicSpringJupiterTests.class, + BasicSpringJupiterTests.NestedTests.class, + BasicSpringTestNGTests.class, + BasicSpringVintageTests.class + )); } - private static void runTestsInAotMode(Class... testClasses) { + private static void runTestsInAotMode(long expectedNumTests, Class... testClasses) { try { System.setProperty(AotDetector.AOT_ENABLED, "true"); - LauncherDiscoveryRequestBuilder builder = LauncherDiscoveryRequestBuilder.request() - .filters(includeEngines("junit-jupiter")); + LauncherDiscoveryRequestBuilder builder = LauncherDiscoveryRequestBuilder.request(); Arrays.stream(testClasses).forEach(testClass -> builder.selectors(selectClass(testClass))); LauncherDiscoveryRequest request = builder.build(); SummaryGeneratingListener listener = new SummaryGeneratingListener(); @@ -115,6 +118,7 @@ class AotIntegrationTests extends AbstractAotTests { List exceptions = summary.getFailures().stream().map(Failure::getException).toList(); throw new MultipleFailuresError("Test execution failures", exceptions); } + assertThat(summary.getTestsSucceededCount()).isEqualTo(expectedNumTests); } finally { System.clearProperty(AotDetector.AOT_ENABLED); @@ -128,27 +132,4 @@ class AotIntegrationTests extends AbstractAotTests { return new TestClassScanner(classpathRoots); } - private static final String[] expectedSourceFilesForBasicSpringJupiterTests = { - // Global - "org/springframework/test/context/aot/TestAotMappings__Generated.java", - // BasicSpringJupiterSharedConfigTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext001_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext001_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext001_BeanDefinitions.java", - // BasicSpringJupiterTests -- not generated b/c already generated for BasicSpringJupiterSharedConfigTests. - // "org/springframework/context/event/DefaultEventListenerFactory__TestContext00?_BeanDefinitions.java", - // "org/springframework/context/event/EventListenerMethodProcessor__TestContext00?_BeanDefinitions.java", - // "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests__TestContext00?_ApplicationContextInitializer.java", - // "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests__TestContext00?_BeanFactoryRegistrations.java", - // "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext00?_BeanDefinitions.java", - // BasicSpringJupiterTests.NestedTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext002_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext002_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext002_BeanDefinitions.java", - }; - } diff --git a/spring-test/src/test/java/org/springframework/test/context/aot/TestAotProcessorTests.java b/spring-test/src/test/java/org/springframework/test/context/aot/TestAotProcessorTests.java index 97dc489de2..376bbc6206 100644 --- a/spring-test/src/test/java/org/springframework/test/context/aot/TestAotProcessorTests.java +++ b/spring-test/src/test/java/org/springframework/test/context/aot/TestAotProcessorTests.java @@ -92,37 +92,7 @@ class TestAotProcessorTests extends AbstractAotTests { } private static List expectedSourceFiles() { - return Arrays.stream(expectedSourceFiles).map(Path::of).toList(); + return Arrays.stream(expectedSourceFilesForBasicSpringTests).map(Path::of).toList(); } - private static final String[] expectedSourceFiles = { - // Global - "org/springframework/test/context/aot/TestAotMappings__Generated.java", - // BasicSpringJupiterSharedConfigTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext001_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext001_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterSharedConfigTests__TestContext001_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext001_BeanDefinitions.java", - // BasicSpringJupiterTests -- not generated b/c already generated for BasicSpringJupiterSharedConfigTests. - // BasicSpringJupiterTests.NestedTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext002_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext002_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringJupiterTests_NestedTests__TestContext002_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext002_BeanDefinitions.java", - // BasicSpringTestNGTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext003_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext003_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringTestNGTests__TestContext003_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringTestNGTests__TestContext003_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext003_BeanDefinitions.java", - // BasicSpringVintageTests - "org/springframework/context/event/DefaultEventListenerFactory__TestContext004_BeanDefinitions.java", - "org/springframework/context/event/EventListenerMethodProcessor__TestContext004_BeanDefinitions.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringVintageTests__TestContext004_ApplicationContextInitializer.java", - "org/springframework/test/context/aot/samples/basic/BasicSpringVintageTests__TestContext004_BeanFactoryRegistrations.java", - "org/springframework/test/context/aot/samples/basic/BasicTestConfiguration__TestContext004_BeanDefinitions.java" - }; - }