Canigó. Com configurar propietats en fitxers YAML per a proves unitàries

Darrera actualització: 03-12-2021

Introducció

A partir de la versió 3.4 del Framework Canigó, es permet definir la configuració en format YAML en lloc del tradicional format de propietats. En cas de ser necessari sobreescriure propietats per a proves unitàries, és possible generar un fitxer YAML, ubicar-lo a la carpeta de recursos de prova i referenciar el seu contingut dins de qualsevol prova.

L’objectiu d’aquest article és mostrar com configurar propietats en fitxers YAML per a proves unitàries per a projectes generats amb el Framework Canigó.

Configuració

Per a incloure un fitxer de propietats en format YAML en un projecte Canigó, es necessita crear un fitxer application.yml a la carpeta src/test/resources/config/props. Per exemple:

application:
  id: YmlFileTestCanigo
  version: 1.0.0
  defaultLanguage: ca_ES

persistence:
  showSQL: true
  generateDdl: false
  database: HSQL
  dialect: org.hibernate.dialect.HSQLDialect

I fer ús de les propietats definides. Per exemple, al fitxer app-custom-persistence-jpa.xml de la carpeta src/test/resources/config/spring:

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
  <description> Fem servir Hibernate com a motor de persistència per sota de JPA. </description>
  <property name="showSql" value="${persistence.showSQL}" />
  <property name="generateDdl" value="${persistence.generateDdl}" />
  <property name="database" value="${persistence.database}" />
  <property name="databasePlatform" value="${persistence.dialect}" />
</bean>

Funcionament

Per a poder fer ús de les propietats en format YAML a les proves unitàries, serà necessari utilitzar el YamlPropertiesApplicationContextInitializer. Per la qual cosa, serà necessari definir una classe per a la càrrega de la configuració de Spring pel ContextConfiguration. Per exemple, TestAppConfig.java:

...

@Configuration
@ImportResource({ "classpath:spring/canigo-core.xml" })
@ComponentScan(basePackages = { "cat.gencat.ymlfiletestcanigo.service" })
@EnableAutoConfiguration
public class TestAppConfig {

}

En el següent exemple de test utilitzarem TestAppConfig per a carregar la configuració de Spring i el YamlPropertiesApplicationContextInitializer per a carregar les propietats en els fitxers YAML. Per exemple podríem tenir el test EquipamentServiceTest.java:

...

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = { TestAppConfig.class }, initializers = YamlPropertiesApplicationContextInitializer.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class EquipamentServiceTest {

  @Value("${application.id}")
  private String aplicationId;

  ...

	@Test
  public void testYamlProperties() throws IOException {
    Assert.assertEquals("YmlFileTestCanigo", aplicationId);

    Resource resource = YamlPropertiesUtils.getYamlPropertiesResource();
    Optional<?> applicationYaml = new YamlPropertySourceLoader()
      .load(resource.getFilename(), resource)
      .stream().map(propertySource -> propertySource.getSource()).findFirst();

    Assert.assertTrue(applicationYaml.isPresent());
  }

  ...
}

Proves

Si executem el test EquipamentServiceTest.testYamlProperties podrem obtenir un resultat com el següent:

Spring Yaml Test Ejemplo 1

Conclusió

A Canigó és possible sobreescriure les propietats de l’aplicació mitjançant fitxers YAML que només apliquin a les proves unitàries.


Per a més informació: [Mòdul de configuració](/plataformes/canigo/documentacio-per-versions/3.4LTS/3.4.9/moduls/moduls-generals/modul-configuracio/).