Spring-boot использует профили Spring ( http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html ), которые позволяют, например, иметь отдельную конфигурацию для разных сред. Один из способов использования этой функции - настроить тестовую базу данных для использования в интеграционных тестах. Интересно, однако, необходимо ли создавать свой собственный профиль «test» и явно активировать этот профиль в каждом тестовом файле? Сейчас я делаю это следующим образом:
- Создайте application-test.properties внутри src / main / resources
- Напишите там тестовую конфигурацию (пока только имя базы данных)
В каждый тестовый файл включают:
@ActiveProfiles("test")
Есть ли более умный / краткий способ? Например, тестовый профиль по умолчанию?
Изменить 1: этот вопрос относится к Spring-Boot 1.4.1
источник
Другой способ сделать это - определить базовый (абстрактный) тестовый класс, который будут расширять ваши фактические тестовые классы:
@RunWith(SpringRunner.class) @SpringBootTest() @ActiveProfiles("staging") public abstract class BaseIntegrationTest { }
Бетонный тест:
public class SampleSearchServiceTest extends BaseIntegrationTest{ @Inject private SampleSearchService service; @Test public void shouldInjectService(){ assertThat(this.service).isNotNull(); } }
Это позволяет извлекать не только
@ActiveProfiles
аннотацию. Вы также можете представить себе более специализированные базовые классы для различных видов интеграционных тестов, например, уровень доступа к данным или уровень обслуживания, или для функциональных особенностей (общие@Before
или@After
методы и т. Д.).источник
Вы можете поместить файл application.properties в папку test / resources. Там вы устанавливаете
Это своего рода тестовый профиль по умолчанию при запуске тестов.
источник
src/test/resources/application.properties
файл,src/main/resources/application.properties
при запуске тестов содержимое игнорируется.application-test.properties
для тестов и переопределить только те свойства, которые вам нужны.spring.profiles.active=test
как указано в ответе.Деларативный способ сделать это (на самом деле, небольшая поправка к исходному ответу @ Compito):
spring.profiles.active=test
вtest/resources/application-default.properties
.test/resources/application-test.properties
для тестов и переопределите только те свойства, которые вам нужны.источник
application.properties
в пути к классам тоже анализируется,test/resources/application-default.properties
а затем, поскольку обнаружен профиль "test",test/resources/application-test.properties
анализируется? В противном случае это не решит проблему @ciastek, как указано в ответе @ Compito .Если вы используете maven, вы можете добавить это в pom.xml:
Затем maven должен запустить ваши интеграционные тесты (* IT.java) с помощью этого инструмента, а также IntelliJ запустится с активированным этим профилем, чтобы вы могли затем указать все свойства внутри
и вам не нужны свойства "-default".
источник
В моем случае у меня разные application.properties в зависимости от среды, например:
а application.properties содержит свойство spring.profiles.active для выбора нужного файла.
Для своих интеграционных тестов я создал новый
application-test.properties
файл внутри,test/resources
и с@TestPropertySource({ "/application-test.properties" })
аннотацией это файл, который отвечает за выбор application.properties, которые я хочу, в зависимости от моих потребностей для этих тестовисточник
@ActiveProfiles
, а не@TestPropertySource
.Чтобы активировать "тестовый" профиль, напишите в build.gradle:
test.doFirst { systemProperty 'spring.profiles.active', 'test' activeProfiles = 'test' }
источник
Другой программный способ сделать это:
import static org.springframework.core.env.AbstractEnvironment.DEFAULT_PROFILES_PROPERTY_NAME; @BeforeClass public static void setupTest() { System.setProperty(DEFAULT_PROFILES_PROPERTY_NAME, "test"); }
Отлично работает.
источник
Вы можете поместить свои свойства теста в
src/test/resources/config/application.properties
.Свойства, определенные в этом файле, переопределят те, которые определены в
src/main/resources/application.properties
время тестирования.Дополнительные сведения о том, почему это работает, можно найти в документации Spring Boots .
источник
Если вы просто хотите установить / использование профиля по умолчанию в момент создания сборки через Maven затем передать аргумент
-Dspring.profiles.active=test
Так же , какисточник
Добавьте
spring.profiles.active=tests
в свой файл application.properties, вы можете добавить несколько файлов свойств в свое приложение весенней загрузки, напримерapplication-stage.properties
,application-prod.properties
и т. Д. И вы можете указать в своем файле application.properties файл для ссылки, добавивspring.profiles.active=stage
илиspring.profiles.active=prod
вы также можете передать профиль во время запуска приложения загрузки Spring, указав команду:
java -jar
-Dspring.profiles.active=local
build/libs/turtle-rnr-0.0.1-SNAPSHOT.jar
В соответствии с именем профиля выбирается файл свойств, в приведенном выше случае при передаче профиля
local
рассматриваетсяapplication-local.properties
файлисточник