В тестах остаются старые записи и получаю Unique index or primary key violation

У меня есть несколько интеграционных тестов для слоя service и controller. Вот для слой service.

@SpringBootTest
@Rollback(true)
public class UserServiceIntTest {
  
    @Mock
    private UserRepository userRepository;

    @Autowired
    private UserService userService;

    @Test
    public void saveUser_shouldOK() {
        var result = userService.create(User_01);
        assertThat(result, notNullValue());
        assertThat(result.getUserName(), is("UserName-01"));
        ...       
    }

    @Test
    public void updateUser_shouldOK() {
        var result = UserService.create(User_01);
        ...
    }
    ...

В каждом методе я предварительно создаю одного или нескольких пользователей в БД (User_01, User_02, ...). Если запускать по одному тесту, то все проходит без ошибок. Но когда запускаю все тесты разом, то получаю Unique index or primary key violation.

Причина в том, что поле name помечено как Unique. И получается, что в момент выполнения очередного теста, когда я пытаюсь создать новую запись в БД, там уже существует такая же запись.

Хотя по умолчанию RollBack = true, т.е. все записи должны откатываться. Но логи показывают, что при запуске saveUser_shouldOK перед добавлением новой записи там уже есть такая запись.

Перед запусками тестов проверил, в БД нет ни одной записи, т.е. отсутствует ее инициализация данными из другого места. Я уже явно добавил аннотацию @Rollback(true), но проблема так и осталась.

Почему так происходит и как это победить?


Ответы (0 шт):