Uso de perfiles para testear en Spring Boot

Como comentaba en el articulo anterior gracias al uso de perfiles es fácil personalizar las aplicaciones en Spring Boot.

Uno de los casos mas habituales del uso de perfiles es para testear la aplicación. Partiendo del mismo código fuente anterior, que os recuerdo esta en https://github.com/chuchip/profilestest vamos a ver el uso de los perfiles en testing.

Mirando el código de la clase ProfilesTestsTest.java

@Profile("test")
@SpringBootTest(webEnvironment= WebEnvironment.RANDOM_PORT)
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
public class ProfilesTestsTest {
	
	@Value("${app.ID}")
	int id;
	
	@Autowired 
	IRead read;
	
	@Autowired
	Environment env;
	
	@Test
	public void inicio() {
		String name=read.readRegistry(id);
		assertEquals(name,"test");
		String principal=env.getProperty("app.principal","NULL");
		assertNotEquals(principal,"profe"); 
		String test=env.getProperty("app.test","NULL");
		assertEquals(test,"test");
	}

}

nos debemos de fijar en la etiqueta @ActiveProfiles(“test”) con ella indicamos a Spring que active el perfil test con lo cual ahora solo se procesaran las clases que tengan la etiqueta @Profile(“test”) o no tengan ninguna etiqueta @Profile.

Como se puede ver en el directorio de test,  también incluimos la clase ReadTestImpl.java que es exactamente igual que la existente en el paquete com.profesorp.profiletest.impl.def pero con la etiqueta @Profile(“test”).

En el directorio resources de test (profilestest/src/test/resources/) encontramos el fichero application.properties que usara **Spring Boot ** cuando se lance el test, pues como hemos comentado ese fichero se ejecuta siempre, sin importar el perfil activo.  Sin embargo no procesara el fichero application.properties general.

Para demostrarlo en el fichero “/profilestest/src/main/resources/application.properties” se ha incluido la linea

Y en “/profilestest/src/test/resources/application.properties” están las siguientes lineas

En el test podemos ver como no encuentra la variable de entorno app.principal pero si que encuentra la variable app.test

Y esto es todo por esta entrada. Espero que haya servidor para aclarar un poco más el uso de perfiles (profiles) en Spring Boot.

¡¡ Hasta la próxima !!