Java Spring Boot 2和JUnit 5的正确配置

Java Spring Boot 2和JUnit 5的正确配置,java,spring,maven,spring-boot,junit5,Java,Spring,Maven,Spring Boot,Junit5,使用Spring Boot 2.0.0.RC2 我编写了一个配置类: @Configuration @ConditionalOnProperty("launchdarkly.sdkKey") public class LDClientConfiguration { @Bean public LDClientInterface ldClient(LDClientConfigurationProperties props) { return new LDClien

使用Spring Boot 2.0.0.RC2

我编写了一个配置类:

@Configuration
@ConditionalOnProperty("launchdarkly.sdkKey")
public class LDClientConfiguration  {

    @Bean
    public LDClientInterface ldClient(LDClientConfigurationProperties props) {
        return new LDClient(props.getSdkKey(), props.getLDConfig());
    }
}
和ConfigurationProperties类:

@Component
@ConfigurationProperties(prefix = "launchdarkly")
public class LDClientConfigurationProperties {

    private String sdkKey;
    // more attributes

    public void setSdkKey(String sdkKey) {
        this.sdkKey = sdkKey;
    }
    // more setters

    public LDConfig getLDConfig() {
        LDConfig.Builder builder = new LDConfig.Builder();
        // set builder w/ attributes
        return builder.build();
    }
}
我正试图对此进行测试,从src/test/resources/application-test.yml读取配置:

launchdarkly:
    sdkKey: <redacted>
如果我用
@ExtendWith(SpringExtension.class)

然后它尝试加载
com/company/spring/launchdarkly/LDClientConfigurationTestContext.xml
,然后加载
com/company/spring/launchdarkly/LDClientConfigurationTestContext.groovy
,但不查找yml文件。

我的测试类上的这组注释似乎有效:

@SpringBootApplication
@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = { <array of classes goes here> })
@springboot应用程序
@ExtendWith(SpringExtension.class)
@SpringBootTest(类={})

Spring Boot 2和JUnit 5集成测试的正确注释集是(在Kotlin中):

您可以通过字段上的
@LocalServerPort
注释获取服务正在运行的端口。

在Java中:

  • 在测试类上添加注释
  • 在测试资源文件夹中有一个application.yaml
  • 测试在属性文件中读取的值

  • 您的测试类是什么样子的?添加到post^的测试类如果您最终的目标只是从特定于测试上下文的属性文件加载测试的属性,Spring Boot为此提供了一个简单的概要文件机制:是的,这正是我试图做的,但无法让它工作。它一直试图将文件读取为XML,而不是.properties或.yml。我已经将snakeyaml添加到test Classpath.Hm中,至少在您发布的代码中,您在
    LDClientConfiguration.ldClient()
    中调用的
    getter不存在。您是在这里省略了它还是在实际代码中也没有它?
    @SpringBootApplication
    不应该添加到测试类中。
    @SpringJUnitConfig(SpringBootContextLoader.class)
    public class LDClientConfigurationPropertiesTest {
    
        @Autowired
        private LDClientConfigurationProperties props;
    
        @Test
        public void test() {
            LDConfig config = props.getLDConfig();
            assertThat(config, notNullValue());
        }
    }
    
    @SpringBootApplication
    @ExtendWith(SpringExtension.class)
    @SpringBootTest(classes = { <array of classes goes here> })
    
    @ExtendWith(SpringExtension::class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
    @ActiveProfiles("dev") // optional
    @TestInstance(TestInstance.Lifecycle.PER_CLASS) // optional
    
    @ExtendWith(SpringExtension.class)
    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)