Fix precondition check in TestClassScanner and improve Javadoc

- remove not-empty precondition check for packageNames so that the core
  scan() method can actually be used.
- document constructor
- document use case for packageNames
- add test that scan's all test classes in the spring-test project
- reduce logging due to the previous action item

See gh-28824
This commit is contained in:
Sam Brannen
2022-07-15 17:10:47 +02:00
parent 3fd72652be
commit 72e4a5f9fe
3 changed files with 26 additions and 5 deletions

View File

@@ -94,6 +94,13 @@ class TestClassScanner {
private final Set<Path> classpathRoots;
/**
* Create a {@code TestClassScanner} for the given classpath roots.
* <p>For example, in a Gradle project that only supports Java-based tests,
* the supplied set would contain a single {@link Path} representing the
* absolute path to the project's {@code build/classes/java/test} folder.
* @param classpathRoots the classpath roots to scan
*/
TestClassScanner(Set<Path> classpathRoots) {
Assert.notEmpty(classpathRoots, "'classpathRoots' must not be null or empty");
Assert.noNullElements(classpathRoots, "'classpathRoots' must not contain null elements");
@@ -111,9 +118,12 @@ class TestClassScanner {
/**
* Scan the configured classpath roots for Spring integration test classes
* in the given packages.
* <p>This method is currently only intended to be used within our own test
* suite to validate the behavior of this scanner with a limited scope. In
* production scenarios one should invoke {@link #scan()} to scan all packages
* in the configured classpath roots.
*/
Stream<Class<?>> scan(String... packageNames) {
Assert.notEmpty(packageNames, "'packageNames' must not be null or empty");
Assert.noNullElements(packageNames, "'packageNames' must not contain null elements");
if (logger.isInfoEnabled()) {

View File

@@ -87,11 +87,22 @@ class TestClassScannerTests {
);
}
@Test
void scanEntireSpringTestModule() {
assertThat(scan()).hasSizeGreaterThan(400);
}
private Stream<Class<?>> scan() {
return new TestClassScanner(classpathRoots()).scan();
}
private Stream<Class<?>> scan(String... packageNames) {
return new TestClassScanner(classpathRoots()).scan(packageNames);
}
private Set<Path> classpathRoots() {
try {
Set<Path> classpathRoots = Set.of(
Paths.get(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()));
return new TestClassScanner(classpathRoots).scan(packageNames);
return Set.of(Paths.get(getClass().getProtectionDomain().getCodeSource().getLocation().toURI()));
}
catch (Exception ex) {
throw new RuntimeException(ex);

View File

@@ -14,7 +14,7 @@
<Logger name="org.springframework.test.context.TestContext" level="warn" />
<Logger name="org.springframework.test.context.TestContextManager" level="warn" />
<Logger name="org.springframework.test.context.ContextLoaderUtils" level="warn" />
<Logger name="org.springframework.test.context.aot" level="trace" />
<Logger name="org.springframework.test.context.aot" level="debug" />
<Logger name="org.springframework.test.context.cache" level="warn" />
<Logger name="org.springframework.test.context.junit4.rules" level="warn" />
<Logger name="org.springframework.test.context.transaction.TransactionalTestExecutionListener" level="warn" />