Issue
I have a side project were I'm using Spring Boot, Liquibase and Postgres.
I have the following sequence of tests:
test1();
test2();
test3();
test4();
In those four tests I'm creating the same entity. As I'm not removing the records from the table after each test case, I'm getting the following exception: org.springframework.dao.DataIntegrityViolationException
I want to solve this problem with the following constraints:
- I don't want to use the
@repository
to clean the database. - I don't want to kill the database and create it on each test case because I'm using TestContainers and doing that would increase the time it takes to complete the tests.
In short: How can I remove the records from one or more tables after each test case without 1) using the @repository
of each entity and 2) killing and starting the database container on each test case?
Solution
Annotate your test class with @DataJpaTest
. From the documentation:
By default, tests annotated with @DataJpaTest are transactional and roll back at the end of each test. They also use an embedded in-memory database (replacing any explicit or usually auto-configured DataSource).
For example using Junit4:
@RunWith(SpringRunner.class)
@DataJpaTest
public class MyTest {
//...
}
Using Junit5:
@DataJpaTest
public class MyTest {
//...
}
Answered By - Marc