9

Is there a possibility to replace a single bean or value from a Spring configuration for one or more integration tests?

In my case, I have the configuration

@Configuration
@EnableAutoConfiguration
@ComponentScan(basePackages = {"foo.bar"})
public class MyIntegrationTestConfig {
    // everything done by component scan
}

Which is used for my integration test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class)
public class MyIntegrationTest {
    // do the tests
}

Now I want to have a second set of integration tests where I replace one bean by a different one.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class)
public class MySpecialIntegrationTest {
    // influence the context configuration such that a bean different from the primary is loaded

    // do the tests using the 'overwritten' bean
}

What is the most simple way to achieve this?

1 Answer 1

10

The Spring test framework is able to understand extension over configuration. It means that you only need to extend MySpecialIntegrationTest from MyIntegrationTest:

@ContextConfiguration(classes = MySpecialIntegrationTestConfig.class, loader = SpringApplicationContextLoader.class)
public class MySpecialIntegrationTest extends MyIntegrationTest {

  @Configuration
  public static class MySpecialIntegrationTestConfig {
    @Bean
    public MyBean theBean() {}
  }

}

and create the necessary Java Config class and provide it to @ContextConfiguration. Spring will load the base one and extend it with the one that you specialize in your extended test case.

Refer to the official documentation for further discussion.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.