Tenho um conjunto de propriedades em src/main/resources/application.properties
:
app.firstprop=2
app.secondprop=3
app.thirdprop=5
app.fourthprop=7
E eu quero substituir app.secondprop
todos os meus testes, mantendo as propriedades restantes inalteradas. Uma opção é:
@SpringBootTest(properties=["app.secondprop=99"])
mas isso significa que tenho que repetir esse valor de propriedade em cada arquivo de teste.
Outra opção é usar src/test/resources/application.properties
para sobrescrever meu arquivo de propriedades. Infelizmente, tenho que especificar todas as propriedades inalteradas, bem como a propriedade sobrescrita:
app.firstprop=2
app.secondprop=99
app.thirdprop=5
app.fourthprop=7
Se eu não especificar as propriedades inalteradas, elas não serão definidas durante os testes. Isso novamente é uma repetição indesejada.
Como posso substituir uma única propriedade para todos os testes e manter o princípio DRY?
Tenha o arquivo application-test.properties apenas com a propriedade que você deseja substituir e defina o perfil ativo para teste.
O Spring boot mescla automaticamente propriedades dos arquivos application-test.properties e application.properties. A propriedade mencionada em application-test.properties substitui a propriedade mencionada em application.properties.
Veja esta postagem sobre como definir o perfil ativo: Definindo o perfil ativo padrão no Spring-boot
Se você quiser um valor de propriedade específico em todos os seus testes, siga a sugestão de Andrew S :
application-test.properties
(não há necessidade de especificar todos os adereços)test
via@ActiveProfiles("test")
Se você quiser um valor de propriedade específico em alguns testes, use herança de classe de teste:
@SpringBootTest(properties=["app.secondprop=99"])
Além disso, você ainda pode sobrescrever esta prop em classes de teste filhas.