Forum Discussion

infant_coder's avatar
4 years ago

How to share the Spring Boot context between steps in cucumber test?

Hi all,

 

I am working on a cucumber integration test project for spring boot. Currently I have only one feature file, and I have placed @SpringBootTest & @AutoConfigureMockMvc annotations within the stepdef file. I would like to have these annotations common for all step files. Please help me in doing this. I would much appreciate any help. Thanks.

@SpringBootTest
@AutoConfigureMockMvc

 

2 Replies

  • mpkorstanje's avatar
    mpkorstanje
    Occasional Contributor

    If you are using the latest Cucumber (v5.7.0) to make Cucumber aware of your test configuration you can annotate a configuration class on your glue path with `@CucumberContextConfiguration` and with one of the following annotations: `@ContextConfiguration`, `@ContextHierarchy` or `@BootstrapWith`. If you are using SpringBoot, you can annotate configuration class with `@SpringBootTest`

    For example:

    import com.example.app;
    
    import org.springframework.boot.test.context.SpringBootTest;
    
    import io.cucumber.spring.CucumberContextConfiguration;
    
    @CucumberContextConfiguration
    @SpringBootTest(classes = TestConfig.class)
    public class CucumberSpringConfiguration {
    
    }

    You can then `@Autowire`  components from the application context into any step definition file. No further spring configuration is needed. For example:

    package com.example.app;
    
    public class MyStepDefinitions {
    
       @Autowired
       private MyService myService;
    
       @Given("feed back is requested from my service")
       public void feed_back_is_requested(){
          myService.requestFeedBack();
       }
    }


    The only requirement is that both `MyStepDefinitions` and `CucumberSpringConfiguration` are both in a package that is on the glue path. So either you have configured `@CucumberOptions(glue="com.example")` explicitly or your test runner class is in the same package as your step definition (`com.example`).

    You can find more information in the `cucumber-spring` module in github.

    https://github.com/cucumber/cucumber-jvm/tree/master/spring

    • sonya_m's avatar
      sonya_m
      SmartBear Alumni (Retired)

      Thanks for helping  mpkorstanje!

       

      Hi infant_coder ! Is this the sort of advice you are looking for?