Search code examples
spring-bootcucumber-javaspring-cache

How to avoid Cucumber from recreating or refreshing the app context


My cucumber tests get the spring boot context refreshed on each pass, I have some database cache being done and it is killing the performance of the compilation process.

My abstract test is marked as @SpringBootTest(defined_port) with a @ContextConfiguration(loader=SpringBootContextLoader.class).

I already tried adding DirtiesContext but it did not work... any ideas?


Solution

  • 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/main/cucumber-spring