Size: a a a

2020 February 19

РН

Роман Нагаев in Java & Co
Yevhenii Ryzhuk
Привет.
Пишу тесты для репозитория.
Для заполнения базы используется FlyWay.
При сохранении ентити валится ошибка: duplicate key value violates unique constraint
JUnit не продолжает sequence, а начинает сначала (или я не правильно настроил).
Кто подскажет как сделать чтобы после выполнения FlyWay для теста при сохранении ентити генерился следующий ид ?
а стратегия генерации id какая?
источник

YR

Yevhenii Ryzhuk in Java & Co
Roman K
Возможно где-то у тебя в скриптах ошибка выставления текущего значения сиквенса.
INSERT INTO tbl_4_sg VALUES (1, 2013, 1, 109, 0, 209, 6.7);
Вот пример инсерта из FlyWay.
Ну а при запуску теста, когда я хочу сохранить ентити без указания ид, ругается что с ид 1 уже есть
источник

YR

Yevhenii Ryzhuk in Java & Co
Роман Нагаев
а стратегия генерации id какая?
Вот GenerationType.IDENTITY
источник

РН

Роман Нагаев in Java & Co
Yevhenii Ryzhuk
INSERT INTO tbl_4_sg VALUES (1, 2013, 1, 109, 0, 209, 6.7);
Вот пример инсерта из FlyWay.
Ну а при запуску теста, когда я хочу сохранить ентити без указания ид, ругается что с ид 1 уже есть
постгрес?
источник

YR

Yevhenii Ryzhuk in Java & Co
да
источник

РН

Роман Нагаев in Java & Co
удали указание id при инсерте в скрипте, сиквенс не увеличивается при инсерте с явно указанным id
источник

RK

Roman K in Java & Co
Вообще, реальные вызовы БД в юнит-тестах - это пиздей
источник

RK

Roman K in Java & Co
юнит-тесты должны выполняться при каждой сборке и максимально быстро.
источник

YR

Yevhenii Ryzhuk in Java & Co
Роман Нагаев
удали указание id при инсерте в скрипте, сиквенс не увеличивается при инсерте с явно указанным id
Ок, попробую.
Благодарю.
источник

YR

Yevhenii Ryzhuk in Java & Co
Roman K
юнит-тесты должны выполняться при каждой сборке и максимально быстро.
Вот такие настройки:
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@DataJpaTest
public class SG4RepositoryTest
....
источник

RK

Roman K in Java & Co
А если внезапно собрать с конфигом от продакшен базы - то пиздей вдвойне :-)
источник

YR

Yevhenii Ryzhuk in Java & Co
=))
источник

YR

Yevhenii Ryzhuk in Java & Co
Знаю, ну пока так как есть )
Потом все перепишем )
источник

RK

Roman K in Java & Co
В этом SG4Repository есть хоть один кусок кода, написанный человеком?
источник

YR

Yevhenii Ryzhuk in Java & Co
Нет
источник

RK

Roman K in Java & Co
Тогда нахера его тестировать?
источник

RK

Roman K in Java & Co
Тестами надо покрывать то, что человек может внезапно сломать при рефакторинге.
источник

YR

Yevhenii Ryzhuk in Java & Co
Там спецификации используются для динамического запроса.
Сказали протестировать
источник

RK

Roman K in Java & Co
Ну, то есть тебе конструктор запросов протестировать надо.
источник

YR

Yevhenii Ryzhuk in Java & Co
Верно
источник