Je suis en train de déplacer toutes mes configurations Spring vers le code Java. J'ai rencontré un problème où je veux maintenant définir quel profil j'utilise basé sur un commutateur de ligne de commande ou un profil maven, etc ... Je veux aussi éviter d'avoir à placer toutes les mêmes annotations sur chacun de mes tests Des classes. Ce n'est pas une application web, mais plutôt une suite de tests fonctionnels.Java Spring ApplicationContext Configuration
Voici ma tentative:
public class CompanyApplicationContextInitializer
implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(final ConfigurableApplicationContext applicationContext) {
final AnnotationConfigApplicationContext rootContext = new AnnotationConfigApplicationContext();
rootContext.getEnvironment().setActiveProfiles(System.getProperty("spring.profile.active", "local"));
rootContext.register(LocalConfiguration.class, SauceLabsConfiguration.class);
}
}
J'ai mes essais annotés avec les éléments suivants:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CompanyApplicationContextInitializer.class)
Cependant, lorsque je tente d'exécuter mes tests, mes pièces autowired ne sont pas situés. Suis-je sur la bonne voie? Comment puis-je câbler dans cette classe pour définir par programme mon ApplicationContext?
J'espérais éviter d'avoir une classe de test de base qui définirait toutes les options de configuration, mais il semblerait que je n'aurai pas le choix (actuellement). J'espérais éviter d'avoir à placer quel profil était actif sur chacune des classes de test (ce qui est facilement fait ici avec la propriété JVM), mais j'espérais vraiment éviter d'avoir à placer l'annotation ContextConfiguration sur chacune de mes classes de test, donc le déplacer vers un test de niveau de base permettra d'atténuer ce problème. – Scott
L'annotation @ActiveProfiles peut être utilisée dans une classe de base et s'appliquerait à toutes les sous-classes. En outre, cette annotation possède un certain nombre de propriétés, dont une appelée inheritLocations. Voir le Javadoc. –