Как активировать весенний загрузочный профиль с огурцом

Я ищу хороший способ активировать весенний профиль для моих тестов на огурец. Тесты на огурец должны использовать заглушенную версию сервиса, которая помечена:

@Profile("test")
@Component
class FooServiceStub extends FooService {...}

Обычный сервис выглядит так:

@Profile("prod")
@Component
class FooService {...}    

Мои требования:

  • Запустите тесты на огурец с помощью mvn: $ mvn test
  • Запустите тесты на огурец в IDE
  • Запустите тесты на огурец на сервере сборки
  • Нет необходимости использовать аргумент -Dspring.profiles.active=...

Источники, которые я нашел, но не решил мою проблему:

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 {
}
Другие вопросы по тегам