Spring-boot wykorzystuje profile Spring ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ), które pozwalają na przykład na oddzielną konfigurację dla różnych środowisk. Jednym ze sposobów korzystania z tej funkcji jest skonfigurowanie testowej bazy danych do użycia przez testy integracyjne. Zastanawiam się jednak, czy konieczne jest utworzenie własnego profilu „test” i jawna aktywacja tego profilu w każdym pliku testowym? Teraz robię to w następujący sposób:
- Utwórz application-test.properties w src / main / resources
- Napisz tam konfigurację specyficzną dla testu (na razie tylko nazwa bazy danych)
W każdym pliku testowym uwzględnij:
@ActiveProfiles("test")
Czy istnieje mądrzejszy / bardziej zwięzły sposób? Na przykład domyślny profil testowy?
Edycja 1: To pytanie dotyczy Spring-Boot 1.4.1
źródło
Innym sposobem, aby to zrobić, jest zdefiniowanie podstawowej (abstrakcyjnej) klasy testowej, którą rozszerzą rzeczywiste klasy testowe:
@RunWith(SpringRunner.class) @SpringBootTest() @ActiveProfiles("staging") public abstract class BaseIntegrationTest { }
Test betonu:
public class SampleSearchServiceTest extends BaseIntegrationTest{ @Inject private SampleSearchService service; @Test public void shouldInjectService(){ assertThat(this.service).isNotNull(); } }
Pozwala to wyodrębnić więcej niż tylko
@ActiveProfiles
adnotację. Można również wyobrazić sobie bardziej wyspecjalizowane klasy bazowe do różnego rodzaju testów integracyjnych, np. Warstwa dostępu do danych a warstwa usługowa lub do specjalizacji funkcjonalnych (typowe@Before
lub@After
metody itp.).źródło
Możesz umieścić plik application.properties w folderze test / resources. Tam ustawiłeś
Jest to rodzaj domyślnego profilu testowego podczas przeprowadzania testów.
źródło
src/test/resources/application.properties
plik,src/main/resources/application.properties
zawartość jest ignorowana podczas uruchamiania testów.application-test.properties
do testów i nadpisać tylko te właściwości, których potrzebujesz.spring.profiles.active=test
jak mówi odpowiedź.Delarative sposób, aby to zrobić (w rzeczywistości drobna poprawka do oryginalnej odpowiedzi @ Compito):
spring.profiles.active=test
wtest/resources/application-default.properties
.test/resources/application-test.properties
do testów i nadpisz tylko te właściwości, których potrzebujesz.źródło
application.properties
w ścieżce klas jest również analizowana,test/resources/application-default.properties
a następnie, po wykryciu profilu „test”,test/resources/application-test.properties
zostaje przeanalizowana? W przeciwnym razie nie rozwiązałoby to problemu @ ciastek, jak skomentowano w odpowiedzi @ Compito .Jeśli używasz maven, możesz dodać to w pom.xml:
Następnie maven powinien uruchomić testy integracji (* IT.java) przy użyciu tego arkusza, a także IntelliJ uruchomi się z aktywowanym profilem - możesz więc określić wszystkie właściwości w środku
i nie powinieneś potrzebować właściwości „-default”.
źródło
Aby aktywować profil „testowy”, napisz w swoim build.gradle:
test.doFirst { systemProperty 'spring.profiles.active', 'test' activeProfiles = 'test' }
źródło
W moim przypadku mam różne application.properties w zależności od środowiska, na przykład:
a application.properties zawiera właściwość spring.profiles.active umożliwiającą wybranie odpowiedniego pliku.
Do moich testów integracji utworzyłem nowy
application-test.properties
plik wewnątrztest/resources
i z@TestPropertySource({ "/application-test.properties" })
adnotacją jest to plik, który jest odpowiedzialny za wybieranie aplikacji. Właściwości, które chcę, w zależności od moich potrzeb do tych testówźródło
@ActiveProfiles
, nie@TestPropertySource
.Możesz umieścić właściwości specyficzne dla testu w
src/test/resources/config/application.properties
.Właściwości zdefiniowane w tym pliku zastąpią właściwości zdefiniowane w
src/main/resources/application.properties
podczas testowania.Więcej informacji na temat tego, dlaczego to działa, można znaleźć w dokumentacji Spring Boots .
źródło
Inny programowy sposób na zrobienie tego:
import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME; @BeforeClass public static void setupTest() { System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test"); }
Działa świetnie.
źródło
Jeśli chcesz po prostu ustawić / użyć domyślnego profilu w momencie tworzenia kompilacji przez maven, przekaż argument
-Dspring.profiles.active=test
Tak jakźródło
Dodaj
spring.profiles.active=tests
w pliku application.properties, można dodać wiele plików właściwości w aplikacji rozruchowej jak sprężynyapplication-stage.properties
,application-prod.properties
itp I można określić w swoim application.properties plik podczas plik odnieść poprzez dodaniespring.profiles.active=stage
lubspring.profiles.active=prod
profil można również przekazać w czasie uruchamiania aplikacji Spring Boot, wydając polecenie:
java -jar
-Dspring.profiles.active=local
build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar
Zgodnie z nazwą profilu pobierany jest plik właściwości, w powyższym przypadku przekazanie profilu
local
rozważapplication-local.properties
plikźródło