J'ai la liste de propriétés suivante dans mon application.yml :

foo: 
  bar: 
    - 
      id: baz
      item: value
    // ...

Ensuite, je veux écraser la valeur item dans les tests utilisant @DynamicPropertySource:

    @DynamicPropertySource
    @JvmStatic
    @Suppress("unused")
    fun setupProperties(registry: DynamicPropertyRegistry) {
        registry.add("foo.bar[0].item") { "new value" }
    }

Mais pendant les tests, j'ai défini toutes les autres propriétés sur des valeurs nulles, avec un élément dans le tableau bar.

Je suppose que je ne fais pas référence correctement à l'entrée de carte dans le fichier yaml. Je me demande comment je peux faire ça?

0
pixel 23 avril 2020 à 10:42

2 réponses

Meilleure réponse

Il s'avère que la documentation de Spring Boot indique clairement :

Lorsque les listes sont configurées à plusieurs endroits, le remplacement fonctionne en remplaçant la liste entière.

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-complex-type-merge

Cela signifie effectivement que je dois fournir un élément de liste complet:

@DynamicPropertySource
@JvmStatic
@Suppress("unused")
fun setupProperties(registry: DynamicPropertyRegistry) {
    registry.add("foo.bar[0].id") { "new baz" }
    registry.add("foo.bar[0].item") { "new value" }
    // ...
}
0
pixel 29 avril 2020 à 12:08

Je n'ai pas de réponse pour vous, mais peut-être que cela aide.

Essayez d'obtenir la liste des variables d'environnement pendant l'exécution via le actionneur env. Vous pourriez alors découvrir quelle clé vous auriez à remplacer exactement dans votre test.

0
Ahmed Sayed 23 avril 2020 à 15:02