tutorial starter start mvc example application java spring spring-boot

java - starter - spring boot wikipedia



Perfil predeterminado de arranque de primavera para pruebas de integraciĆ³n (9)

Agregue spring.profiles.active=tests en su archivo application.properties, puede agregar múltiples archivos de propiedades en su aplicación de arranque de spring como application-stage.properties , application-prod.properties , etc. Y puede especificar en su application.properties archivo mientras que archivo para referir agregando spring.profiles.active=stage o spring.profiles.active=prod

También puede pasar el perfil en el momento de ejecutar la aplicación de arranque de primavera proporcionando el comando:

java -jar -Dspring.profiles.active=local build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar -Dspring.profiles.active=local build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar

De acuerdo con el nombre del perfil, el archivo de propiedades se recoge, en el caso anterior, pasar el perfil local considere el archivo application-local.properties

Spring-boot utiliza perfiles Spring ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ) que permiten, por ejemplo, tener una configuración separada para diferentes entornos. Una forma en que uso esta función es configurar la base de datos de prueba para que la usen las pruebas de integración. Sin embargo, me pregunto si es necesario crear mi propia ''prueba'' de perfil y activar explícitamente este perfil en cada archivo de prueba. En este momento lo hago de la siguiente manera:

  1. Crear application-test.properties dentro de src / main / resources
  2. Escriba la configuración específica de la prueba allí (solo el nombre de la base de datos por ahora)
  3. En cada archivo de prueba incluyen:

    @ActiveProfiles("test")

¿Hay una manera más inteligente / más concisa? Por ejemplo, un perfil de prueba predeterminado?

Edición 1: Esta pregunta pertenece a Spring-Boot 1.4.1


En mi caso, tengo propiedades de aplicación diferentes según el entorno, algo como:

application.properties (base file) application-dev.properties application-qa.properties application-prod.properties

y application.properties contiene una propiedad spring.profiles.active para elegir el archivo adecuado.

Para mis pruebas de integración, creé un nuevo archivo application-test.properties dentro de test/resources y con la @TestPropertySource({ "/application-test.properties" }) este es el archivo que se encarga de elegir la aplicación. propiedades que deseo según mis necesidades para esas pruebas


Hasta donde sé, no hay nada que aborde directamente su solicitud, pero puedo sugerir una propuesta que podría ayudar:

Puede usar su propia anotación de prueba que es una anotación meta que comprende @SpringBootTest y @ActiveProfiles("test") . Por lo tanto, aún necesita el perfil dedicado, pero evite dispersar la definición del perfil en todas sus pruebas.

Esta anotación pasará de forma predeterminada a la test perfil y puede anular el perfil utilizando la metaanotación.

@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) @SpringBootTest @ActiveProfiles public @interface MyApplicationTest { @AliasFor(annotation = ActiveProfiles.class, attribute = "profiles") String[] activeProfiles() default {"test"}; }


Otra forma de hacerlo es definir una clase de prueba base (abstracta) que sus clases de prueba reales extenderán:

@RunWith(SpringRunner.class) @SpringBootTest() @ActiveProfiles("staging") public abstract class BaseIntegrationTest { }

Prueba concreta:

public class SampleSearchServiceTest extends BaseIntegrationTest{ @Inject private SampleSearchService service; @Test public void shouldInjectService(){ assertThat(this.service).isNotNull(); } }

Esto le permite extraer más que solo la anotación @ActiveProfiles . También podría imaginar clases base más especializadas para diferentes tipos de pruebas de integración, por ejemplo, capa de acceso a datos versus capa de servicio, o para especialidades funcionales ( @Before comunes @Before o @Before , etc.)


Otra forma programática de hacer eso:

import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME; @BeforeClass public static void setupTest() { System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test"); }

Funciona muy bien


Para activar el perfil de "prueba" escriba en su build.gradle:

test.doFirst { systemProperty ''spring.profiles.active'', ''test'' activeProfiles = ''test'' }


Puede poner un archivo application.properties en su carpeta de prueba / recursos. Ahí te pones

spring.profiles.active=test

Este es un tipo de perfil de prueba predeterminado al ejecutar pruebas.


Si usa maven, puede agregar esto en 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> ...

Luego, maven debe ejecutar sus pruebas de integración (* IT.java) usando este argumento, y también IntelliJ comenzará con este perfil activado, para que pueda especificar todas las propiedades dentro

application-test.yml

y no debería necesitar propiedades "por defecto".


Una forma tardía de hacerlo (de hecho, un pequeño retoque a la respuesta original de @ Compito):

  1. Establezca spring.profiles.active=test en test/resources/application-default.properties .
  2. Agregue test/resources/application-test.properties para las pruebas y anule solo las propiedades que necesita.