при запуске integrationTest в БД не сохранятся данные

Рейтинг: 1Ответов: 0Опубликовано: 07.06.2023

Пробую написать интеграционый тест слоя сервиса. Метод проверки чтения всех полей из БД.

Класс сущности

@Getter@Setter
@AllArgsConstructor
@NoArgsConstructor
@Entity
public class UserEntity {
@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Access(AccessType.PROPERTY)
    private Long id;
    
    private String name;
}

Сервис

@RequiredArgsConstructor
@Service
@Transactional
public class UserServiceImpl implements UserService {

    private final UserRepository userRepository;

    @Override
    public UserEntity create(UserEntity object) {
        return UserRepository.save(object);
    }

    @Override
    public UserEntity get(Long id) {
        return UserRepository.findById(id)
            .orElseThrow(() -> new NotFoundException(USER_NOT_FOUND));        
    }        
}

Для тестов использую БД h2, настройки стандартные

spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
    driverClassName: org.h2.Driver
    username: sa
    password: password

Интеграционые тесты для слоя сервиса

@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class UserIntTest {
  
    @Autowired
    private UserService UserService;
 
    @Test
    public void saveUser_shouldOK() {
        var result = userService.create(User_02);

        var user = userService.get(2L);

        assertThat(result, notNullValue());
        assertThat(result.getId(), is(1L));
    }

    @Test
    @Sql({"/getUsers_shouldOk.sql"})
    @Transactional    
    public void getUsers_shouldOk() {
       var result = userService.getAll();
       // так тоже пробовал
       //var result = userRepository.findAll();

       assertThat(result, notNullValue());
       assertThat(result.size(), is(3));
    }
}

Файл getUsers_shouldOk.sql

INSERT INTO `user` (`id`, `name`) VALUES (1, 'user-01');
INSERT INTO `user` (`id`, `name`) VALUES (2, 'user-02');
INSERT INTO `user` (`id`, `name`) VALUES (3, 'user-03');

Добавляю в БД три записи используя аннотацию @Sql на этом методе. Но при чтении данных из БД получаю пустой список. Sql файл getUsers_shouldOk.sql находится в папке resorces. При запуске теста на этот файл ошибок нет. Почему я не могу прочитать данные из БД?

Ответы

Ответов пока нет.