Remplacez @Valeur de la propriété au sein de @Configuration au cours du Printemps de test au Démarrage
Scénario
J'ai un Ressort de Démarrage de l'application avec un @Configuration
annoté Printemps de configuration de la classe qui contient quelques @Value
annoté champs. Pour les tests je veux remplacer ces valeurs de champ personnalisé avec des valeurs de test.
Malheureusement, ces valeurs de test ne peut pas être substituée à l'aide d'un simple fichier de propriétés (String) constantes ou similaire, mais je doit utiliser certains personnalisée écrite de la propriété résoudre classe Java (par exemple TargetProperties.getProperty("some.username")
).
Le problème que j'ai c'est que quand j'ajoute une coutume PropertySource
à la ConfigurableEnvironment
dans ma configuration de test, il est déjà trop tard, car ce PropertySource
sera ajouté après la par exemple RestTemplate
a été créé.
Question
Comment puis-je remplacer @Value
annoté champs dans un @Configuration
classe avec des propriétés obtenues par programme via code Java personnalisé avant autre chose est initialisé?
Code
Configuration De La Production De La Classe
@Configuration
public class SomeConfiguration {
@Value("${some.username}")
private String someUsername;
@Value("${some.password}")
private String somePassword;
@Bean
public RestTemplate someRestTemplate() {
RestTemplate restTemplate = new RestTemplate();
restTemplate.getInterceptors().add(
new BasicAuthorizationInterceptor(someUsername, somePassword));
return restTemplate;
}
}
Configuration De Test De La Classe
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
public class SomeTest {
@SpringBootConfiguration
@Import({MySpringBootApp.class, SomeConfiguration.class})
static class TestConfiguration {
@Autowired
private ConfigurableEnvironment configurableEnvironment;
//This doesn't work:
@Bean
@Lazy(false)
//I also tried a @PostConstruct method
public TargetPropertiesPropertySource targetPropertiesPropertySource() {
TargetPropertiesPropertySource customPropertySource =
new TargetPropertiesPropertySource();
configurableEnvironment.getPropertySources().addFirst(customPropertySource);
return customPropertySource;
}
}
}
OriginalL'auteur Markus Ratzer | 2016-09-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le constructeur de l'injection de la production des cas, ce qui permet de définir la configuration manuellement:
OriginalL'auteur Journeycorner
Vous pouvez modifier les propriétés directement dans le
@SpringBootTest
annotation à l'aide de laproperties
paramètre:OriginalL'auteur alexbt
Vous pouvez utiliser
@TestPropertySource
OriginalL'auteur Aman Tuladhar