Utilisation de Spring Boot 2.0.0.RC2.
J'ai écrit une classe de configuration:
@Configuration
@ConditionalOnProperty("launchdarkly.sdkKey")
public class LDClientConfiguration {
@Bean
public LDClientInterface ldClient(LDClientConfigurationProperties props) {
return new LDClient(props.getSdkKey(), props.getLDConfig());
}
}
Et une classe 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();
}
}
J'essaie de tester cela, en lisant la configuration de src/test/resources/application-test.yml:
launchdarkly:
sdkKey: <redacted>
J'ai les dépendances suivantes:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit-jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-engine</artifactId>
<version>${junit-platform.version}</version>
<scope>test</scope>
</dependency>
Et junit-platform-surefire-provider est configuré dans maven-surefire-plugin v2.19.1
Je n'arrive pas à trouver les annotations appropriées pour que mes classes de test lisent la configuration à partir de src/test/resources/application-test.yml.
J'ai lu https://junit.org/junit5/docs/current/user-guide mais n'arrive toujours pas à obtenir les annotations correctes. Toute aide serait appréciée.
edit: classe de test
@SpringJUnitConfig(SpringBootContextLoader.class)
public class LDClientConfigurationPropertiesTest {
@Autowired
private LDClientConfigurationProperties props;
@Test
public void test() {
LDConfig config = props.getLDConfig();
assertThat(config, notNullValue());
}
}
Si j'annote la classe avec @ExtendWith(SpringExtension.class)
Et @SpringBootTest
, le système essaie de charger com/company/spring/launchdarkly/LDClientConfigurationTest-context.xml
, puis com/company/spring/launchdarkly/LDClientConfigurationTestContext.groovy
mais ne recherche pas de fichier yml.
Les annotations appropriées pour les tests d'intégration Spring Boot 2 et JUnit 5 sont les suivantes (en Kotlin):
@ExtendWith(SpringExtension::class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ActiveProfiles("dev") // optional
@TestInstance(TestInstance.Lifecycle.PER_CLASS) // optional
Vous pouvez obtenir le port sur lequel le service est exécuté via l'annotation @LocalServerPort
sur un champ.