Spring-boot utiliza perfiles de Spring ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ) que permiten, por ejemplo, tener configuraciones separadas para diferentes entornos. Una de las formas en que uso esta función es configurar la base de datos de prueba para que la utilicen las pruebas de integración. Me pregunto, sin embargo, ¿es necesario crear mi propio perfil de 'prueba' y activar explícitamente este perfil en cada archivo de prueba? Ahora mismo lo hago de la siguiente manera:
- Cree application-test.properties dentro de src / main / resources
 - Escriba la configuración específica de la prueba allí (solo el nombre de la base de datos por ahora)
 En cada archivo de prueba, incluya:
@ActiveProfiles("test")
¿Existe una forma más inteligente / concisa? Por ejemplo, ¿un perfil de prueba predeterminado?
Edición 1: esta pregunta pertenece a Spring-Boot 1.4.1
fuente

Otra forma de hacer esto es definir una clase de prueba base (abstracta) que extenderán sus clases de prueba reales:
@RunWith(SpringRunner.class) @SpringBootTest() @ActiveProfiles("staging") public abstract class BaseIntegrationTest { }Prueba de hormigón:
public class SampleSearchServiceTest extends BaseIntegrationTest{ @Inject private SampleSearchService service; @Test public void shouldInjectService(){ assertThat(this.service).isNotNull(); } }Esto le permite extraer algo más que la
@ActiveProfilesanotación. También puede imaginar clases base más especializadas para diferentes tipos de pruebas de integración, por ejemplo, capa de acceso a datos frente a capa de servicio, o para especialidades funcionales (comunes@Beforeo@Aftermétodos, etc.).fuente
Puede poner un archivo application.properties en su carpeta de prueba / recursos. Ahí te pones
Esta es una especie de perfil de prueba predeterminado mientras se ejecutan pruebas.
fuente
src/test/resources/application.propertiesarchivo, elsrc/main/resources/application.propertiescontenido se ignora al ejecutar las pruebas.application-test.propertiespara pruebas y anular solo las propiedades que necesita.spring.profiles.active=testcomo dice la respuesta.Una forma delarativa de hacer eso (de hecho, una pequeña modificación a la respuesta original de @ Compito):
spring.profiles.active=testentest/resources/application-default.properties.test/resources/application-test.propertiespara pruebas y anule solo las propiedades que necesita.fuente
application.propertiesen el classpath también se analiza, luegotest/resources/application-default.propertiesy luego, debido a que se detecta la "prueba" del perfil,test/resources/application-test.propertiesse analiza? De lo contrario, no resolvería el problema de @ ciastek como se comentó en la respuesta de @ Compito .Si usa maven, puede agregar esto en pom.xml:
Luego, maven debe ejecutar sus pruebas de integración (* IT.java) usando este arugument, y también IntelliJ comenzará con este perfil activado, para que luego pueda especificar todas las propiedades dentro
y no debería necesitar propiedades "-default".
fuente
En mi caso tengo diferentes application.properties dependiendo del entorno, algo como:
y application.properties contiene una propiedad spring.profiles.active para elegir el archivo adecuado.
Para mis pruebas de integración, creé un nuevo
application-test.propertiesarchivo dentrotest/resourcesy con la@TestPropertySource({ "/application-test.properties" })anotación este es el archivo que se encarga de elegir la aplicación.propiedades que quiero dependiendo de mis necesidades para esas pruebasfuente
@ActiveProfiles, no@TestPropertySource.Para activar el perfil de "prueba", escriba en su build.gradle:
test.doFirst { systemProperty 'spring.profiles.active', 'test' activeProfiles = 'test' }fuente
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.
fuente
Puede poner las propiedades específicas de su prueba en
src/test/resources/config/application.properties.Las propiedades definidas en este archivo anularán las definidas en
src/main/resources/application.propertiesdurante la prueba.Para obtener más información sobre por qué esto funciona, consulte los documentos de Spring Boots .
fuente
Si simplemente desea establecer / usar el perfil predeterminado en el momento de realizar la compilación a través de maven, pase el argumento
-Dspring.profiles.active=testcomofuente
Añadir
spring.profiles.active=testsen su archivo application.properties, puede agregar múltiples archivos propiedades en su aplicación de arranque primaveralapplication-stage.properties,application-prod.properties, etc, y se puede especificar en sus application.properties archivo mientras el archivo para hacer referencia mediante la adiciónspring.profiles.active=stageospring.profiles.active=prodtambié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=localbuild/libs/turtle-rnr-0.0.1-SNAPSHOT.jarDe acuerdo con el nombre del perfil, se recoge el archivo de propiedades, en el caso anterior, el perfil de paso
localconsidera elapplication-local.propertiesarchivofuente