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ę zawszesrc/test/resources/config/application.properties
- ta konfiguracja zaczyta się tylko podczas testów
W tym podejściu nie ma potrzeby tworzenia żadnego profilu.