Updated April 1, 2023
Definition of Spring Boot Test Configuration
Spring boot test configuration is useful to test our spring boot application, using test configuration we can test the small part of our application. Spring boot configuration test is making the verification test is easy and fast, so the scope of our testing is narrowed into class methods. Spring boot @TestConfiguration classes are used only on selective test classes which explicitly imported the @import notation.
Overview of Spring Boot Test Configuration
- In spring boot testing @TestConfiguration is the specialized form of @configuration which was used to define additional beans or test our spring boot application.
- In the spring boot application, we can configure spring beans in top of class which was annotated with @TestConfiguration.
- We need to explicitly register @TestConfiguration class using the project class which contains the test cases.
- We can use different types of annotation to test the spring boot application.
- Import annotation is indicating more than one configuration which was used to import the same into our application context file or spring boot context file.
- We can use @TestConfiguration method to modify the context of the spring boot application during the runtime of the test.
- We can also use @TestConfiguration method and bean definition. Example is to replace the original bean with fake bean and we can also change the bean configuration to make the bean stable for testing purposes.
- The @TestConfiguration is an inherited property of @Configuration beans. @configuration is the parent annotation of @TestConfiguration bean.
- While developing the project we need to add the dependency of the spring boot starter test.
- The annotation of @TestConfiguration is excluded from component scanning of spring boot.
- We can also exclude the configuration classes which was annotated by @TestConfiguration from component scanning.
- We need to explicitly import annotation of @TestConfiguration in every testing when we need to automate them.
- We can also annotate the @TestConfiguration annotation as @TestComponent.
Two test configuration additional
- In spring boot basically, there are two ways to include the additional test in test configuration are as follows.
1) @Import annotation
2) Static nested classes
1) @Import annotation –
- This annotation will indicate one or more configuration classes which was import into our application context file or spring test context file.
- @Bean annotation is declared in a @TestConfiguration class which was accessed by using injection of @Autowired.
- @import annotation bean is itself autowired or it will autowired at the time of declaring configuration class.
- We can declare the @import annotation by using meta-annotation or by using class level.
Example
@TestConfiguration
Public class testconfiguration
{
@Bean
DataSource createDataSource () {
}
}
2) Static nested classes –
- We can also define test configuration in nested classes inside into class of test. Nested classes are annotated by using @TestConfiguration and @configuration.
- If the declared class is annotated by using @TestConfiguration it is known as a test class within a nested class. This class is registered automatically we have no need to register it again.
Example
@SpringBootTest (webEnv = webEnv.PORT)
public class testconfiguration
{
@ServerPort
int Port;
@Autowired
DataSource dsource;
@TestConfiguration
static class TestConfiguration {
@Bean
DataSource createDataSource() {
}
}
}
Code Example
Below is the code example of spring boot test configuration are as follows.
1) Create project template using spring initializer and give name to project –
In the below step, we have provided project group name as com. example, artifact name as springboottestconfiguration, project name as springboottestconfiguration, and selected java version as 8.
Group – com.example Artifact name – springboottestconfiguration
Name – springboottestconfiguration Spring boot – 2.6.0
Project – Maven project Description – Project for springboottestconfiguration
Java – 8 Dependencies – spring web, spring native
Package name – com.example.springboottestconfiguration
2) After generating project extract files and open this project by using spring tool suite –
After generating the project by using spring initializer in this step we are extracting the jar file and opening the project by using the spring tool suite.
3) After opening project using spring tool suite check the project and its files –
- In this step, we are checking all the project template files. We also need to check the maven dependencies and system libraries.
4) Add dependency packages –
- In this step, we are adding the required dependency to our project.
Code:
<dependency> -- Start of dependency tag.
<groupId>org.springframework.boot</groupId> -- Start and end of groupId tag.
<artifactId>spring-boot-starter-test</artifactId> -- Start and end of artifactId tag.
</dependency> -- End of dependency tag.
5) Configure application. properties file –
- In this step, we have configuring the application.properties file.
Code:
spring.main.allow-bean-definition-overriding = true
6) Test configuration by using static inner class –
In this example, we are using a static inner class to use test configuration. We can say that static inner class is a class-level annotation that allows in the static inner class itself.
Code:
@SpringBootTest
public class testconfiguration
{
@TestConfiguration
public static class ClientConfiguration {
@Bean
public client getWebClient(final Builder build) {
return build.baseUrl ("http://localhost")).build();
}
@Autowired
private DataService dService;
}
}
7) Run and test the application –
Example Project
The below example shows an example project of spring boot test configuration. We are using the template name springboottestconfiguration.
1) Use the @TestConfiguration annotation in our project –
Code:
@TestConfiguration
public class TestConfig
{
@Bean
public HService hService (){
return new Hservice () {
public String getMessage (String stud_name) {
return "Test configuration: "+stud_name;
}
};
}
}
2) Import test configuration in class –
Code:
@SpringBootTest
@Import (TestConfig.class)
public class ProcTest {
@Autowired
private ProcTest pTest;
@Test
public void testSayHi () {
String message = ProcTest.studName ("ABC");
System.out.println (message);
Assert.assertEquals(message, "Test configuration: ABC");
}
private static String studName (String string) {
return null;
}
}
3) Run and test the application –
Conclusion – Spring Boot Test Configuration
In spring boot there are two ways to include additional test in test configuration first one is @import annotation and the second is static nested classes. It is useful to test our spring boot application, using test configuration we can test a small part of our application.
Recommended Articles
This is a guide to Spring Boot Test Configuration. Here we discuss definition, overviews, Two test configuration additional, examples with code implementation. You may also have a look at the following articles to learn more –