Nab*_*bor 4 spring-test spring-boot junit5
在这个项目中,我必须使用较旧的 Spring Boot 版本2.2.13.RELEASE。
我有一个简单的应用程序-test.yml
myapp:
foo: test
Run Code Online (Sandbox Code Playgroud)
也是一个非常简单的AppConfig.java
@Component
@ConfigurationProperties(prefix = "myapp")
public class AppConfig {
private String foo;
public String getFoo() {
return foo;
}
public void setFoo(final String foo) {
this.foo = foo;
}
}
Run Code Online (Sandbox Code Playgroud)
这是测试类:
@SpringBootTest(classes = {AppConfig.class}, properties = "spring.profiles.active:test,local")
class MyTest {
private final AppConfig properties;
@Autowired
IPLocatorServiceTest(final AppConfig properties) {
this.properties = properties;
}
@Test
void test() {
assertThat(properties.getFoo()).isEqualTo("test")
}
}
Run Code Online (Sandbox Code Playgroud)
测试失败。不为空AppConfig,但不会从文件加载值。
我不想加载整个 Spring 应用程序上下文及其所有数据库内容并思考。
我只想加载一些 bean 和配置。
由于下面的答案不是很详细,我想提供完整的解决方案:
@Component
@ConfigurationProperties(FeatureProperties.PREFIX)
public class FeatureProperties {
public static final String PREFIX = "myapp.feature";
private String foo;
public String getFoo() {
return foo;
}
public void setFoo(final String foo) {
this.foo = foo;
}
}
@Configuration
@EnableConfigurationProperties(FeatureProperties.class)
public class FeatureConfiguration {
private final FeatureProperties featureProperties;
public UsageConfiguration(final FeatureProperties featureProperties) {
this.featureProperties = featureProperties;
}
}
@SpringBootTest(classes = {FeatureConfiguration.class}, properties = "spring.profiles.active=test,local")
class FeatureServiceTest {
// test code in here
}
Run Code Online (Sandbox Code Playgroud)
这就像一个魅力,只加载上下文中真正需要的bean......
| 归档时间: |
|
| 查看次数: |
5071 次 |
| 最近记录: |