If you want to avoid that the whole Spring Context is started for all of your integration tests, you can take a look at other test annotations that create a sliced context:
@WebMvcTest
creates a Spring Context with only MVC related beans@DataJpaTest
creates a Spring Context with only JPA/JDBC related beans- etc.
In addition to this, I also would remove your CommandLineRunner
from your main entry Spring Boot entry point class. Otherwise also the annotations above would trigger the logic.
Therefore you can outsource it to another @Component
class:
@Component
public class WhateverInitializer implements CommandLineRunner{
@Autowired
private ApplicationEventPublisher publisher;
// ...
@Override
public void run(String... args) throws Exception {
...
// read data from a file and publishing an event
}
}
Apart from this you can also use @Profile("production")
on your Spring beans to only populate them when a specific profile is active. This way you can either include or exluce them for all your integration tests if you don’t want e.g. this startup logic always.
CLICK HERE to find out more related problems solutions.