Как активировать весенний загрузочный профиль с огурцом
Я ищу хороший способ активировать весенний профиль для моих тестов на огурец. Тесты на огурец должны использовать заглушенную версию сервиса, которая помечена:
@Profile("test")
@Component
class FooServiceStub extends FooService {...}
Обычный сервис выглядит так:
@Profile("prod")
@Component
class FooService {...}
Мои требования:
- Запустите тесты на огурец с помощью mvn: $ mvn test
- Запустите тесты на огурец в IDE
- Запустите тесты на огурец на сервере сборки
- Нет необходимости использовать аргумент -Dspring.profiles.active=...
Источники, которые я нашел, но не решил мою проблему:
- http://www.baeldung.com/cucumber-spring-integration (с использованием загрузчика @ContextConfiguration с SpringApplicationContextLoader.class, которого нет в последней версии Spring Boot, 1.5.2.RELEASE на момент написания.)
- программно установить профиль Spring в Cucumber(возиться с системным свойством)
2 ответа
Я решил эту проблему с помощью аннотации, которую я поместил в свой класс FeatureStep.
Аннотация:
Обратите внимание на @ActiveProfiles на нем.
import java.lang.annotation.*;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@ContextConfiguration
@ActiveProfiles("test")
@SpringBootTest(
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
classes = FeatureTestConfiguration.class)
public @interface FeatureFileSteps {
}
Класс конфигурации очень прост:
@Configuration
@Import(FooApplication.class)
public class FeatureTestConfiguration {
}
Используя аннотацию:
Добавление аннотации к функциональным шагам:
@FeatureFileSteps
public class FooFeatureSteps {
@Given(...)
@When(...)
@Then(...)
}
Теперь при запуске тестов функций Cucumber, либо из моей IDE, из командной строки с maven или на сервере сборки, мой тест использует FooServiceSTub, и мои тесты проходят успешно.
В более поздней версии огурца (
6.11.0
) вам нужен класс с конфигурацией пружины, и вы должны аннотировать его, а не определение шагов
@ActiveProfiles("test")
@CucumberContextConfiguration
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class CucumberSpringConfiguration {
}