Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring Boot ignore data.sql when running unit tests

I'm trying to do Unit tests on my Spring Boot repository, but my tests will fail and return javax.persistence.PersistenceException: org.hibernate.exception.ConstraintViolationException: could not execute statement. I've managed to isolate the problem and it seems to be my data.sql in my resources folder that inhibits my tests from running. It seems that having a prebuilt database creates problems when Spring testing.

Now, I can solve the problem by going into my application.properties file and setting spring.datasource.initialization-mode=always to =never instead. But I would rather be able to only turn off that property while running unit tests.

So my question is if it's possible to ignore the data.sql file or to set spring.datasource.initialization-mode=never within the test class?

Here's my test class below.

@RunWith (SpringRunner.class)
@DataJpaTest
public class BikeRepositoryTest {

@Autowired
TestEntityManager entityManager;

@Autowired
BikeRepository bikeRepo;

@Test
public void testFindAll() {
    Bike bike = dummyBike();
    entityManager.persist(bike);
    entityManager.flush();

    List<Bike> bikeList = bikeRepo.findAll();

    assertEquals(bikeList.size(), 1);
    assertThat(bikeList.contains(bike));
}


public static Bike dummyBike() {
    var bike = new Bike();
    bike.setName("gustav");
    bike.setModel("red_dragon");
    bike.setPurchasePrice(BigDecimal.valueOf(456));

    return bike;
}   
}
like image 977
maxorcist Avatar asked Oct 18 '25 13:10

maxorcist


2 Answers

Add an application.properties file under src/test/resources and set the test only properties you would like there. Those configurations should override the main configuration when running tests.

like image 140
Adam Avatar answered Oct 21 '25 03:10

Adam


I cannot comment on Adam's answer for lack of reputation, but :

In src/test/resources add an application.properties with

spring.sql.init.data-locations=test_data.sql

In src/test/resources add a test_data.sql which cannot be empty for some reason, but a content such as :

SELECT 1 AS DUMMY;

will appease Spring.

like image 27
Rémi Avatar answered Oct 21 '25 04:10

Rémi



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!