Support resource patterns in @TestPropertySource locations

Inspired by the recently added support for resource patterns in
@PropertySource locations, this commit adds the same support for
resource locations in @TestPropertySource.

For example, assuming the `config` folder in the classpath contains
only 3 files matching the pattern `file?.properties`,

... the following:

@TestPropertySource("classpath:/config/file1.properties")
@TestPropertySource("classpath:/config/file2.properties")
@TestPropertySource("classpath:/config/file3.properties")

... or:

@TestPropertySource({
    "classpath:/config/file1.properties",
    "classpath:/config/file2.properties",
    "classpath:/config/file3.properties"
})

... can now be replaced by:

@TestPropertySource("classpath*:/config/file?.properties")

See gh-21325
Closes gh-31055
This commit is contained in:
Sam Brannen
2023-08-16 09:44:46 +02:00
parent 3a38bb48b5
commit 1f544f113a
7 changed files with 98 additions and 16 deletions

View File

@@ -0,0 +1,58 @@
/*
* Copyright 2002-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.test.context.env;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.test.context.TestPropertySource;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;
import static org.assertj.core.api.Assertions.assertThat;
/**
* Integration tests for {@link TestPropertySource @TestPropertySource} support
* for resource patterns for resource locations.
*
* @author Sam Brannen
* @since 6.1
*/
@SpringJUnitConfig
@TestPropertySource("classpath*:/org/springframework/test/context/env/pattern/file?.properties")
class ResourcePatternExplicitPropertiesFileTests {
@Test
void verifyPropertiesAreAvailableInEnvironment(@Autowired Environment env) {
assertEnvironmentContainsProperties(env, "from.p1", "from.p2", "from.p3");
}
private static void assertEnvironmentContainsProperties(Environment env, String... names) {
for (String name : names) {
assertThat(env.containsProperty(name)).as("environment contains property '%s'", name).isTrue();
}
}
@Configuration
static class Config {
/* no user beans required for these tests */
}
}