Spring-Boot utilise des profils Spring ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ) qui permettent par exemple d’avoir configuration séparée pour différents environnements. Une des manières que j'utilise cette fonctionnalité est de configurer la base de données de tests pour qu'elle soit utilisée par les tests d'intégration. Je me demande toutefois s'il est nécessaire de créer mon propre "test" de profil et de l'activer explicitement dans chaque fichier de test. En ce moment je le fais de la manière suivante:
Dans chaque fichier de test incluent:
@ActiveProfiles("test")
Y a-t-il un moyen plus intelligent/concis? Par exemple, un profil de test par défaut?
Edit 1: Cette question concerne Spring-Boot 1.4.1
Autant que je sache, rien ne répond directement à votre demande - mais je peux suggérer une proposition qui pourrait aider:
Vous pouvez utiliser votre propre annotation de test qui est une méta annotation comprenant @SpringBootTest
et @ActiveProfiles("test")
. Vous avez donc toujours besoin du profil dédié, mais évitez de disperser la définition du profil dans tous vos tests.
Cette annotation utilisera par défaut le profil test
et vous pourrez remplacer le profil à l'aide de la méta-annotation.
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@SpringBootTest
@ActiveProfiles
public @interface MyApplicationTest {
@AliasFor(annotation = ActiveProfiles.class, attribute = "profiles") String[] activeProfiles() default {"test"};
}
Pour ce faire, vous pouvez également définir une classe de test (abstraite) de base que vos classes de test réelles étendront:
@RunWith(SpringRunner.class)
@SpringBootTest()
@ActiveProfiles("staging")
public abstract class BaseIntegrationTest {
}
Test concret:
public class SampleSearchServiceTest extends BaseIntegrationTest{
@Inject
private SampleSearchService service;
@Test
public void shouldInjectService(){
assertThat(this.service).isNotNull();
}
}
Cela vous permet d’extraire plus que l’annotation @ActiveProfiles
. Vous pouvez également imaginer des classes de base plus spécialisées pour différents types de tests d'intégration, par exemple. couche d'accès aux données vs couche de service, ou pour les spécialités fonctionnelles (méthodes @Before
ou @After
communes, etc.).
Vous pouvez placer un fichier application.properties dans votre dossier test/resources. Là vous définissez
spring.profiles.active=test
C'est un peu un profil de test par défaut lors de l'exécution de tests.
Dans mon cas, j'ai différentes application.properties selon l'environnement, quelque chose comme:
application.properties (base file)
application-dev.properties
application-qa.properties
application-prod.properties
et application.properties contient une propriété spring.profiles.active pour sélectionner le fichier approprié.
Pour mes tests d'intégration, j'ai créé un nouveau fichier application-test.properties
à l'intérieur de test/resources
et avec l'annotation @TestPropertySource({ "/application-test.properties" })
, il s'agit du fichier chargé de sélectionner le fichier application.properties souhaité en fonction de mes besoins. pour ces tests
Une manière délarante de le faire (en fait, une petite contribution à la réponse originale de @ Compito):
spring.profiles.active=test
dans test/resources/application-default.properties
.test/resources/application-test.properties
pour les tests et remplacez uniquement les propriétés dont vous avez besoin.Pour activer le profil "test", écrivez dans votre build.gradle:
test.doFirst {
systemProperty 'spring.profiles.active', 'test'
activeProfiles = 'test'
}
Une autre façon de le faire par programme:
import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME;
@BeforeClass
public static void setupTest() {
System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test");
}
Cela fonctionne très bien.
Si vous utilisez maven, vous pouvez ajouter ceci dans pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-failsafe-plugin</artifactId>
<configuration>
<argLine>-Dspring.profiles.active=test</argLine>
</configuration>
</plugin>
...
Ensuite, maven doit exécuter vos tests d’intégration (* IT.Java) en utilisant cet argument, et IntelliJ commencera également avec ce profil activé - vous pourrez ainsi spécifier toutes les propriétés à l’intérieur.
application-test.yml
et vous ne devriez pas avoir besoin des propriétés "-default".
Ajoutez _spring.profiles.active=tests
_ dans votre fichier application.properties, vous pouvez ajouter plusieurs fichiers de propriétés dans votre application de démarrage telle que _application-stage.properties
_, _application-prod.properties
_, etc. Vous pouvez également spécifier dans votre fichier application.properties fichier à référencer en ajoutant _spring.profiles.active=stage
_ ou _spring.profiles.active=prod
_
vous pouvez également transmettre le profil au moment de l’exécution de l’application Spring Boot en fournissant la commande suivante:
_Java -jar
_-Dspring.profiles.active=local
_build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar
_
Selon le nom du profil, le fichier de propriétés est récupéré. Dans le cas ci-dessus, passez le profil local
considérez le fichier _application-local.properties
_.