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
@ActiveProfiles
anotació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@Before
o@After
mé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.properties
archivo, elsrc/main/resources/application.properties
contenido se ignora al ejecutar las pruebas.application-test.properties
para pruebas y anular solo las propiedades que necesita.spring.profiles.active=test
como 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=test
entest/resources/application-default.properties
.test/resources/application-test.properties
para pruebas y anule solo las propiedades que necesita.fuente
application.properties
en el classpath también se analiza, luegotest/resources/application-default.properties
y luego, debido a que se detecta la "prueba" del perfil,test/resources/application-test.properties
se 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.properties
archivo dentrotest/resources
y 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.properties
durante 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=test
comofuente
Añadir
spring.profiles.active=tests
en 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=stage
ospring.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
De acuerdo con el nombre del perfil, se recoge el archivo de propiedades, en el caso anterior, el perfil de paso
local
considera elapplication-local.properties
archivofuente