Better way to write unit tests with Spring Boot

Basic template for writing the integration tests in springboot. the sql group is additional annotation. When ever you want to execute the particular sql queries before and after method run so u can use @SqlGroup annotation.

 @RunWith(SpringJUnit4ClassRunner.class)
 @SpringBootTest(classes = MainApplication.class,
 webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
 @SqlGroup({
 @Sql(executionPhase = Sql.ExecutionPhase.BEFORE_TEST_METHOD,
 scripts = "classpath:beforeTestRun.sql"),
 @Sql(executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD,
 scripts = "classpath:afterTestRun.sql")})

 public class CustomerControllerIntTest {}

See this StackOverflow answer

Autowiring Property Files using Spring

It’s often the case that credentials and URLs of external services need to be accessible in your application. These values can’t be stored in your version control for security reasons. One solution is to put the values in a Java properties file, store only a template for that file in your version control, and put the actual properties file on your installed instance.

Here’s how to access the properties file values in your Java code using Spring configuration:

@Configuration
@PropertySource("classpath:that-api.properties")
public class ThatApiProperties {

    @Value("${login}")
    private String login;

    @Value("${password}")
    private String password;

    @Value("${uri}")
    private String uri;

    public String getLogin() {
        return this.login;
    }

    public String getPassword() {
        return this.password;
    }

    public String getUri() {
        return this.uri;
    }
}

The properties file for this example needs to be in your project directory in the following subdirectory:

src/main/resources/that-api-TEMPLATE.properties

During your build process, you’ll create a version of this file with the sensitive values plugged in and save it to

src/main/resources/that-api.properties