Как добавить определенные bean-компоненты в тесты на огурец в проектах SpringBoot? - PullRequest
0 голосов
/ 24 июня 2018

У меня очень простая структура проекта:

.
├── build.gradle
├── {gradle stuff}
└── src
    ├── main
    │   ├── java
    │   │   └── my_app
    │   │       ├── ByeByer.java
    │   │       ├── Greeter.java
    │   │       ├── Helloer.java
    │   │       ├── MyApp.java
    │   │       └── MyConfig.java
    │   └── resources
    │       └── application.properties
    └── test
        ├── java
        │   └── my_app
        │       └── e2e
        │           ├── E2EConfig.java
        │           ├── E2ESteps.java
        │           └── MyE2ETest.java
        └── resources
            └── features
                └── myFeature.feature

Код для классов следующий.

Интерфейс Greeter:

public interface Greeter {
    public String greet();
}

Это в основном фиктивный интерфейс для генератора приветствий.

У нас есть две реализации этого интерфейса, ByeByer, который возвращает «Пока» и Helloer, который возвращает «Привет».

main находится в MyApp:

@SpringBootApplication
public class MyApp {
    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(MyApp.class, args);
    }
}

И конфигурация следующая:

@Configuration
public class MyConfig {
    @Bean
    Greeter byebyer(){ 
        return new ByeByer();
    }
}

, определяющая, что в производстве, реализацию Greeter, которую мы хотимиспользуется тот, который генерирует сообщение «Пока-пока».

Тестовая часть в основном представляет собой такой сценарий:

Feature: Just a feature

  Scenario: Just a scenario

    Given just a given
    When just a when
    Then just a then

И класс определения шага для него:

@SpringBootTest(
        classes = {MyApp.class})
public class E2ESteps implements En{

    @Autowired
    Greeter greeter;

    public E2ESteps() {
        Given("^just a given$", () -> {  });

        When("^just a when$", () -> {  });

        Then("^just a then$", () -> {
           assertEquals("Hello", greeter.greet());
        });
    }
}

Я передаю MyApp.class, потому что я хочу использовать ту же конфигурацию, что и на производстве, но я хочу переопределить только реализацию Greeter, чтобы она возвращала "Hello" во время теста.

Тестовый бегун просто:

@RunWith(Cucumber.class)
@CucumberOptions(
        glue = { "my_app.e2e"},
        features = "classpath:features"
)
public class MyE2ETest {
}

Как мне изменить мой проект, чтобы я использовалто же дерево зависимостей, что и производственное, но перекрывающее только определенные bean-компоненты (в данном случае реализацию Greeter производства)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...