Spring Boot - pliki application.properties lub application.yml w testowych resource to code smell

W kilku projektach widziałem pliki application.properties lub application.yml umieszczone w testowych resource (src/test/resources).
Pliki te były prawie identyczne jak pliki, które były umieszczone w głównych resource (src/main/resources).
Za każdym razem, kiedy programista/ka zmieniał/a konfigurację, konieczna była aktualizacja pliku zarówno w głównych jak i testowych resource.
Jest to definitywnie code smell.

Rozwiązanie dla wersji wcześniejszych niż Spring Boot 2.6

W celu uniknięcia duplikacji w plikach konfiguracyjnych możesz utworzyć plik src/test/resources/application-test.properties lub src/test/resources/application-test.yml.
W tym pliku nadpisz lub dodaj konfiguracje niezbędne do działania testów. Podczas testów Spring Boot załaduje najpierw konfigurację z pliku application.properties lub application.yml z katalogu src/main/resources, a następnie z powyższego pliku.
Konieczne jest jeszcze aktywowanie profilu test, co można zrobić np. za pomocą adnotacji ActiveProfiles

1@SpringBootTest
2@ActiveProfiles("test")
3public class SomeExampleTestIT {
4
5}

Rozwiązanie dla wersji późniejszych niż Spring Boot 2.6

W Spring Boot 2.6 zmienił się sposób1 ładowania plików konfiguracyjnych.
Od tej wersji framework ładuje pliki z głównego katalogu resources, a następnie z podkatalogu config.
Możesz więc utworzyć pliki:

  • src/main/resources/application.properties - ta konfiguracja zaczyta się zawsze
  • src/test/resources/config/application.properties - ta konfiguracja zaczyta się tylko podczas testów

W tym podejściu nie ma potrzeby tworzenia żadnego profilu.

Tłumaczenia: