Issue
I am attempting to build a Spring Boot application, trying to stick to test driven development. My issue is that I have Spring Boot JPA included in my project but don't actually have a data source set up yet. Before adding the dependency, I was able to run my unit tests successfully.
Now that I have added the dependency, even attempting to execute my unit tests fails because it is unable to initialize a datasource for Spring Data.
I'm rather new to JUnit, Spring Boot and Mockito though. I want to be able to run my unit tests without actually having a datasource and instead mocking all of my repositories.
What is the proper way to do this?
Solution
If you define some SQL engine commonly used for testing (e.g. HSQL, Derby or H2), Spring Boot should recognize it as test dependency and configure Datasource bean on top of it. In order to do that, just define such engine with test scope:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
Problem will arise when you introduce production Datasource (e.g. Postgres or MySQL). At that state you would need to
- configure testing Datasource explicitly with
@Primary
annotation - or provide testing configuration file (e.g.
src/test/resources/application.properties
) where H2 will be configured.
Answered By - luboskrnac
Answer Checked By - Senaida (JavaFixing Volunteer)