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:
- Crear 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 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):
-
Establezca
spring.profiles.active=test
entest/resources/application-default.properties
. -
Agregue
test/resources/application-test.properties
para las pruebas y anule solo las propiedades que necesita.