при запуске integrationTest в БД не сохранятся данные
Пробую написать интеграционый тест слоя сервиса. Метод проверки чтения всех полей из БД.
Класс сущности
@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. При запуске теста на этот файл ошибок нет. Почему я не могу прочитать данные из БД?
Источник: Stack Overflow на русском