Spring-boot utiliza perfis Spring ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ) que permitem, por exemplo, ter configurações separadas para ambientes diferentes. Uma maneira de usar esse recurso é configurar o banco de dados de teste a ser usado pelos testes de integração. Eu me pergunto, no entanto, é necessário criar meu próprio perfil de 'teste' e ativar explicitamente esse perfil em cada arquivo de teste? No momento, faço isso da seguinte maneira:
- Crie application-test.properties dentro de src / main / resources
- Grave a configuração específica do teste lá (apenas o nome do banco de dados por enquanto)
Em cada arquivo de teste, inclua:
@ActiveProfiles("test")
Existe uma maneira mais inteligente / mais concisa? Por exemplo, um perfil de teste padrão?
Edição 1: Esta questão pertence ao Spring-Boot 1.4.1
fonte
Outra maneira de fazer isso é definir uma classe de teste base (abstrata) que suas classes de teste reais irão estender:
@RunWith(SpringRunner.class) @SpringBootTest() @ActiveProfiles("staging") public abstract class BaseIntegrationTest { }
Teste de concreto:
public class SampleSearchServiceTest extends BaseIntegrationTest{ @Inject private SampleSearchService service; @Test public void shouldInjectService(){ assertThat(this.service).isNotNull(); } }
Isso permite que você extraia mais do que apenas a
@ActiveProfiles
anotação. Você também pode imaginar classes base mais especializadas para diferentes tipos de testes de integração, por exemplo, camada de acesso a dados versus camada de serviço, ou para especialidades funcionais (comuns@Before
ou@After
métodos, etc.).fonte
Você pode colocar um arquivo application.properties em sua pasta de teste / recursos. Lá você define
Este é um tipo de perfil de teste padrão durante a execução de testes.
fonte
src/test/resources/application.properties
arquivo, osrc/main/resources/application.properties
conteúdo será ignorado durante a execução de testes.application-test.properties
para testes e substituir apenas as propriedades de que precisa.spring.profiles.active=test
como a resposta diz.Uma maneira delarativa de fazer isso (na verdade, um pequeno ajuste na resposta original de @ Compito):
spring.profiles.active=test
emtest/resources/application-default.properties
.test/resources/application-test.properties
para testes e substitua apenas as propriedades necessárias.fonte
application.properties
no caminho de classe também é analisadotest/resources/application-default.properties
e, em seguida, como o "teste" do perfil é detectado, eletest/resources/application-test.properties
é analisado? Caso contrário, isso não resolveria o problema de @ciastek, conforme comentado na resposta de @Compito .Se você usar o maven, poderá adicioná-lo em pom.xml:
Então, maven deve executar seus testes de integração (* IT.java) usando este argumento, e também IntelliJ irá iniciar com este perfil ativado - então você pode especificar todas as propriedades dentro
e você não deve precisar das propriedades "-default".
fonte
Para ativar o perfil de "teste", escreva em seu build.gradle:
test.doFirst { systemProperty 'spring.profiles.active', 'test' activeProfiles = 'test' }
fonte
No meu caso, tenho diferentes application.properties dependendo do ambiente, algo como:
e application.properties contém uma propriedade spring.profiles.active para selecionar o arquivo apropriado.
Para meus testes de integração, criei um novo
application-test.properties
arquivo dentrotest/resources
e com a@TestPropertySource({ "/application-test.properties" })
anotação este é o arquivo que se encarrega de escolher o aplicativo.propriedades que desejo dependendo de minhas necessidades para esses testesfonte
@ActiveProfiles
, não@TestPropertySource
.Você pode colocar suas propriedades específicas de teste em
src/test/resources/config/application.properties
.As propriedades definidas neste arquivo substituirão aquelas definidas em
src/main/resources/application.properties
durante o teste.Para obter mais informações sobre por que isso funciona, dê uma olhada nos documentos do Spring Boots .
fonte
Outra maneira programada de fazer isso:
import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME; @BeforeClass public static void setupTest() { System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test"); }
Funciona muito bem.
fonte
Se você deseja simplesmente definir / usar o perfil padrão na hora de fazer a compilação através do maven, passe o argumento
-Dspring.profiles.active=test
Assim comofonte
Adicione
spring.profiles.active=tests
em seu arquivo application.properties, você pode adicionar o arquivo de propriedades múltiplas em seu aplicativo de inicialização primavera comoapplication-stage.properties
,application-prod.properties
, etc. E você pode especificar em seus application.properties arquivo enquanto arquivo para se referir ao adicionarspring.profiles.active=stage
ouspring.profiles.active=prod
você também pode passar o perfil no momento em que executa o aplicativo Spring Boot, fornecendo o comando:
java -jar
-Dspring.profiles.active=local
build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar
De acordo com o nome do perfil, o arquivo de propriedades é coletado, no caso anterior, o perfil de passagem
local
considera oapplication-local.properties
arquivofonte