Um guia rápido para @TestPropertySource
1. Visão geral
O Spring traz muitos recursos para nos ajudar a testar nosso código. Às vezes, precisamos usar propriedades de configuração específicas para definir o cenário desejado em nossos casos de teste.
Nessas situações,we can make use of the @TestPropertySource annotation. With this tool, we can define configuration sources that have higher precedence than any other source used in the project.
Portanto, neste breve tutorial, veremos exemplos em que usamos essa anotação. Além disso, analisaremos seu comportamento padrão e os principais atributos que ele suporta.
Para saber mais sobre os testes no Spring Boot, sugerimos dar uma olhada em nosso‘Testing in Spring Boot' tutorial.
2. Dependências
A maneira mais fácil de incluir todas as bibliotecas necessárias em nosso projeto é adicionando o artefatospring-boot-starter-test em nosso arquivopom.xml:
org.springframework.boot
spring-boot-starter-test
test
2.0.5.RELEASE
Podemos verificar o Maven Central para verificar se estamos usando a versão mais recente dostarter library.
3. Como usar@TestPropertySource
Vamos imaginar que estamos usando o valor de uma propriedade, injetando-o usando a anotação@Value Spring:
@Component
public class ClassUsingProperty {
@Value("${example.testpropertysource.one}")
private String propertyOne;
public String retrievePropertyOne() {
return propertyOne;
}
}
Em seguida, usaremos a anotação em nível de@TestPropertySource class para definir uma nova fonte de configuração e substituir o valor dessa propriedade:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = ClassUsingProperty.class)
@TestPropertySource
public class DefaultTest {
@Autowired
ClassUsingProperty classUsingProperty;
@Test
public void givenDefaultTPS_whenVariableRetrieved_thenDefaultFileReturned() {
String output = classUsingProperty.retrievePropertyOne();
assertThat(output).isEqualTo("default-value");
}
}
Normalmente, sempre que usarmos esta anotação de teste, incluiremos também o@ContextConfiguration one para carregar e configurar oApplicationContext para o cenário.
Por padrão, a anotação@TestPropertySource tenta carregar um arquivoproperties relativo à classe que declarou a anotação.
Neste caso, por exemplo, se nossa classe de teste está no pacotecom.example.testpropertysource, então precisaremos do arquivocom/example/testpropertysource/DefaultTest.properties em nosso classpath.
Vamos adicioná-lo à nossa pasta de recursos e:
# DefaultTest.properties
example.testpropertysource.one=default-value
Além disso, podemos alterar o local do arquivo de configuração padrão ou adicionar propriedades extras que terão precedência ainda maior:
@TestPropertySource(locations = "/other-location.properties",
properties = "example.testpropertysource.one=other-property-value")
Finalmente, podemos especificar se queremos herdar os valoreslocationseproperties das superclasses ou não. Portanto, podemos alternar os atributos de satéliteinheritLocationseinheritProperties , que sãotrue por padrão.
4. Conclusão
Com este exemplo simples, aprendemos como usar a anotação@TestPropertySource Spring de forma eficaz.
Podemos encontrar exemplos para os diferentes cenários emour Github repository.