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 une configuration séparée pour différents environnements. Une façon d'utiliser cette fonctionnalité est de configurer la base de données de test à utiliser par les tests d'intégration. Je me demande cependant est-il nécessaire de créer mon propre profil «test» et d'activer explicitement ce profil dans chaque fichier test? En ce moment, je le fais de la manière suivante:
- Créez application-test.properties dans src / main / resources
- Écrivez la configuration spécifique au test ici (juste le nom de la base de données pour le moment)
Dans chaque fichier de test, incluez:
@ActiveProfiles("test")
Existe-t-il une manière plus intelligente / plus concise? Par exemple, un profil de test par défaut?
Edit 1: Cette question concerne Spring-Boot 1.4.1
la source
Une autre façon de faire est de définir une classe de test de base (abstraite) que vos classes de test réelles étendront:
@RunWith(SpringRunner.class) @SpringBootTest() @ActiveProfiles("staging") public abstract class BaseIntegrationTest { }
Test de béton:
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'
@ActiveProfiles
annotation. 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 des spécialités fonctionnelles (communes@Before
ou@After
méthodes, etc.).la source
Vous pouvez placer un fichier application.properties dans votre dossier test / resources. Là tu as mis
C'est une sorte de profil de test par défaut lors de l'exécution des tests.
la source
src/test/resources/application.properties
fichier, lesrc/main/resources/application.properties
contenu est ignoré lors de l'exécution des tests.application-test.properties
des tests et remplacer uniquement les propriétés dont vous avez besoin.spring.profiles.active=test
comme le dit la réponse.Une manière délirante de faire cela (en fait, une petite modification à la réponse originale de @ Compito):
spring.profiles.active=test
entest/resources/application-default.properties
.test/resources/application-test.properties
pour les tests et remplacez uniquement les propriétés dont vous avez besoin.la source
application.properties
par défaut dans le chemin de classe est également analysée, puistest/resources/application-default.properties
, puis, parce que le profil "test" est détecté,test/resources/application-test.properties
est analysé? Sinon, cela ne résoudrait pas le problème de @ ciastek comme indiqué dans la réponse de @ Compito .Si vous utilisez maven, vous pouvez l'ajouter dans pom.xml:
Ensuite, maven devrait exécuter vos tests d'intégration (* IT.java) en utilisant cet argument, et IntelliJ commencera également avec ce profil activé - vous pourrez alors spécifier toutes les propriétés à l'intérieur
et vous ne devriez pas avoir besoin des propriétés "-default".
la source
Dans mon cas, j'ai différentes applications.properties en fonction de l'environnement, quelque chose comme:
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
application-test.properties
fichier à l'intérieurtest/resources
et avec l'@TestPropertySource({ "/application-test.properties" })
annotation c'est le fichier qui se charge de choisir l'application.properties que je veux en fonction de mes besoins pour ces testsla source
@ActiveProfiles
, non@TestPropertySource
.Pour activer le profil "test", écrivez dans votre build.gradle:
test.doFirst { systemProperty 'spring.profiles.active', 'test' activeProfiles = 'test' }
la source
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.
la source
Vous pouvez insérer les propriétés spécifiques de votre test dans
src/test/resources/config/application.properties
.Les propriétés définies dans ce fichier remplaceront celles définies dans
src/main/resources/application.properties
lors du test.Pour plus d'informations sur les raisons pour lesquelles cela fonctionne, consultez la documentation de Spring Boots .
la source
Si vous souhaitez simplement définir / utiliser le profil par défaut au moment de la construction via maven, passez l'argument
-Dspring.profiles.active=test
commela source
Ajouter
spring.profiles.active=tests
dans votre fichier application.properties, vous pouvez ajouter plusieurs fichiers de propriétés dans votre application de démarrage au printemps commeapplication-stage.properties
,application-prod.properties
, etc. Et vous pouvez spécifier dans votre fichier application.properties tout fichier pour désigner en ajoutantspring.profiles.active=stage
ouspring.profiles.active=prod
vous pouvez également transmettre le profil au moment de l'exécution de l'application Spring Boot en fournissant la commande:
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 sélectionné, dans le cas ci-dessus, le passage du profil
local
considère leapplication-local.properties
fichierla source