166 votes

Profil par défaut Spring-Boot pour les tests d'intégration

Spring-boot utilise Printemps profils (http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html) qui permettent par exemple d'avoir séparé la config pour des environnements différents. Une façon, j'utilise cette fonction pour configurer la base de données de test pour être utilisé par des tests d'intégration. Je me demande cependant est-il nécessaire de créer mon propre profil 'test' et explicitement activer ce profil dans chaque fichier de test? Droit maintenant, je le fais de la manière suivante:

  1. Créer une application de test.propriétés dans src/main/resources
  2. Test d'écriture spécifique config (juste le nom de la base pour l'instant)
  3. Dans chaque fichier de test comprennent:

    @ActiveProfiles("test")
    

Est-il plus intelligent / plus concis? Par exemple, un défaut de profil de test?

Edit 1: Cette question relève de Spring-Boot 1.4.1

148voto

Mathias Dpunkt Points 1427

Autant que je sache, il n'y a rien de vous adresser directement votre demande, mais je peux suggérer une proposition qui pourrait vous aider:

Vous pouvez utiliser votre propre test d'annotation qui est un méta-annotation comprenant @SpringBootTest et @ActiveProfiles("test"). Donc, vous avez encore besoin de l'dédié profil, mais éviter le saupoudrage, la définition de profil sur tous vos test.

Cette annotation par défaut pour le profil test et vous pouvez 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"};
}

73voto

Pierre Henry Points 1940

Une autre façon de le faire est de définir une base (résumé) de la classe de test votre test réel des classes de l'extension :

@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 juste l' @ActiveProfiles d'annotation. Vous pourriez aussi imaginer plus spécialisés des classes de base pour les différents types de tests d'intégration, par exemple, couche d'accès aux données vs couche de service, ou pour la spécialité fonctionnelle commune ( @Before ou @After des méthodes, etc).

67voto

Compito Points 330

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.

7voto

user3044117 Points 1

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éé une nouvelle application-test.properties fichier à l' intérieur test/resources et le @TestPropertySource({ "/application-test.properties" }) annotation est ce fichier qui est chargé de choisir les application.properties Je veux en fonction de mes besoins pour ces tests

4voto

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");
  }
 

Ça marche très bien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X