powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Юнит тест не "полагаясь" на бд. как?
25 сообщений из 39, страница 1 из 2
Юнит тест не "полагаясь" на бд. как?
    #39714915
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой вопрос:

авторYou have a service that goes to DB. And you need to Unit test this service but not rely on DB. How?

авторУ вас есть сервис который ходит в бд. И мне нужно сделать Юнаит тесты сервиса но не полагаясь на БД. как?

Сам я с тестированием не знаком ибо не приходилось. Подскажете? Я нагуглил что метод тестирования результата бд можно вынести в отдельный метод.

P.S. в данном контексте rely я не знаю как более точно перевести. Возможно значение и Зависеть , Полагаться .
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39714926
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop,

так нельзя, само понятие юнит-теста подразумевает что тестируется какой-то кусок кода, а слово сервис подразумевает интеграцию, поэтому тестирование сервиса - это интеграционное тестирование
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39714939
Tsyklop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Андрей Панфилов, Ответ на вопросы выше - никак? я так понимаю.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39714953
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopАндрей Панфилов, Ответ на вопросы выше - никак? я так понимаю.
Как. Мокаете свой слой работы с БД и вперед. Отдаете эталонный резалт сет, проверяете, что зовутся методы для модификации сущностей с нужными параметрами и т.д.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39714969
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopАндрей Панфилов, Ответ на вопросы выше - никак? я так понимаю.
Ответ - моканьем всего что вне сервиса
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39714981
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TsyklopАндрей Панфилов, Ответ на вопросы выше - никак? я так понимаю.нет, ответ звучит иначе: вопрошающий спрашивает чушь. Развернуть CI чтобы оно само нужные сервисы для интеграционных тестов запускало - это несколько часов работы, моканье базы - это чемодан без ручки, который придется тащить за собой весь проект и плакать кровавыми слезами при любом рефакторинге БД.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715044
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Моки - это правильный ответ. Но писать хорошие тесты - большое искусство. Обычно непонимание теста - это тревожный звоночек о том что в тестируемом коде что то плохо. Single resp. Или принципы слабой связности кода.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715053
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonМоки - это правильный ответ. Но писать хорошие тесты - большое искусство.Моки к хорошим тестам никакого отношения не имеют, потому что все моки выглядят примерно так: Покритикуйте/оцените spring-boot приложение - это зло которое лучше избегать при любом удобном случае.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715094
cossack5
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас юнит-тесты как интеграционные: разворачивается база, накатываются все скрипты, потом прогоняются тесты. Занимает все это дело немало времени.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715147
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловmaytonМоки - это правильный ответ. Но писать хорошие тесты - большое искусство.Моки к хорошим тестам никакого отношения не имеют, потому что все моки выглядят примерно так: Покритикуйте/оцените spring-boot приложение - это зло которое лучше избегать при любом удобном случае.
где вы там нормальные моки с нормальными тестами увидали?

одна из целей тестов - фиксировать текущий функционал. если они эту задачу выполняют - значит это хорошие тесты.
если они падают после того как вы поменяли схему базы - значит это хорошие тесты. если вы пошатали кусок кода и тесты упали - значит это снова хорошие тесты.
и да - тесты надо поддерживать. равно так же как и писать.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715149
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cossack5У нас юнит-тесты как интеграционные: разворачивается база, накатываются все скрипты, потом прогоняются тесты. Занимает все это дело немало времени.
так если ваши тесты юзают базу - значит они интеграционные )) и да.. собссно везде так. а где так нет - там проект пишут весьма самонадеянные люди. я больше скажу, тупо код писать и рефачить обложенный тестами в разы быстрее и проще. особенно рефачить.

просто, порой бывают весьма запутанные флоу или тупо приложение стартует несколько минут, и требует еще мешок сервисов сверху, то без тестов писать код становится тупо нереально.

и да, имхо, если юнит тест вылезает с проверкой функционала за пределы класса (ну, или ладно, за пределы инъекций) - это уже интеграционный тест.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715348
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTгде вы там нормальные моки с нормальными тестами увидали?Нигде, это просто гипертрофированный пример концепции увеличения покрытия кода тестами, что, собственно, моки из себя и представляют: покрытие увеличивается, а толку нет никакого.

andreykaTодна из целей тестов - фиксировать текущий функционал. если они эту задачу выполняют - значит это хорошие тесты.
если они падают после того как вы поменяли схему базы - значит это хорошие тесты. если вы пошатали кусок кода и тесты упали - значит это снова хорошие тесты.
и да - тесты надо поддерживать. равно так же как и писать.Все правда ровно до тех пор, пока это не касается моканья БД - любая встраиваемая БД (типа sqllite или hsqldb) даст 100 очков форы мокам.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715370
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловВсе правда ровно до тех пор, пока это не касается моканья БД - любая встраиваемая БД (типа sqllite или hsqldb) даст 100 очков форы мокам.
За исключением того, что не сможет представить функционал целевой СУБД...
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715375
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Невозможно написать внятный тест пока непонятно что тестируется. Поэтому и втаскивать в unit test sqlite и прочие dbms - это оверпроектирование.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715381
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркЗа исключением того, что не сможет представить функционал целевой СУБД...а моки дадут?
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715395
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловЛокшин МаркЗа исключением того, что не сможет представить функционал целевой СУБД...а моки дадут?
Так в том и смысл моков, что им не нужно реализовывать такой функционал. И это и есть ответ на исходный вопрос.

Что касается моей практики, то я не стороник ни мокания слоя БД, ни заменой целевой БД на всякие аналоги типа SQLite и H2 т.к. это может привести к ошибкам в продакшене. Простейший пример - переупорядочение Hibernate'ом порядка изменения строк + констрейнты.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715398
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я против замены оригинальной dbms. Это не совсем честное тестирование. Особенно если мы отошли далеко от ansi sql (это часто бывает в ent) и используем plsql/pgsql и прочие процедурные языки.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715422
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tsyklop, Кстати, вот очень известный фреймворк по поводу моков.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715437
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЯ против замены оригинальной dbms. Это не совсем честное тестирование. Особенно если мы отошли далеко от ansi sql (это часто бывает в ent) и используем plsql/pgsql и прочие процедурные языки.
полностью согласен. если юнит то мокай вызовы в репу. если интеграционный то юзай ту же самую базу с пустой схемой но такой же. можно не коммитить
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715442
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей ПанфиловandreykaTгде вы там нормальные моки с нормальными тестами увидали?Нигде, это просто гипертрофированный пример концепции увеличения покрытия кода тестами, что, собственно, моки из себя и представляют: покрытие увеличивается, а толку нет никакого.

andreykaTодна из целей тестов - фиксировать текущий функционал. если они эту задачу выполняют - значит это хорошие тесты.
если они падают после того как вы поменяли схему базы - значит это хорошие тесты. если вы пошатали кусок кода и тесты упали - значит это снова хорошие тесты.
и да - тесты надо поддерживать. равно так же как и писать.Все правда ровно до тех пор, пока это не касается моканья БД - любая встраиваемая БД (типа sqllite или hsqldb) даст 100 очков форы мокам.
а потом ты заюзаешь какой нибудь хитрый функционал по незнанию своего скулайта, твои тесты начнут проходить, зато тоже самое на реале будет падать

про тесты того парня ну они вроде как минимум тестируют контроллер замоканный. никто ж не говорит что этих тестов достаточно. просто такие тесты в идеале должны быть написаны на все публичные методы всех классов. хотя бы такие.
и еще интеграционных чуток.

где то видал пирамиду тестирования, диаграмму.

в общем, треугольник. где в верхушке енд ту енд тесты. посередке интеграционные, а снизу юнит. (шире -- больше количество).

я с ней почти согласен.

впрочем, в классических спринговых вебсервисах основная логика зашита в сервисном слое и я считаю что там ндо примерно равное количество юнитов и интеграционных.

имхо, если достоверно можешь протестировать юнитом -пиши юниты. если не можешь - добавляй интеграционные.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715458
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTа потом ты заюзаешь какой нибудь хитрый функционал по незнанию своего скулайта, твои тесты начнут проходить, зато тоже самое на реале будет падать моки вообще никаких гарантий не дают, к тому же добавляют головную боль при рефакторинге БД

andreykaTпро тесты того парня ну они вроде как минимум тестируют контроллер замоканный. никто ж не говорит что этих тестов достаточно. просто такие тесты в идеале должны быть написаны на все публичные методы всех классов. хотя бы такие.
ага, вызываем сетер, через гетер проверяем что выставилось то что нужно - покрытие есть, толку нет.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715461
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ты просто топишь за интеграционные тесты я с тобой согласен. не вижу смысла писать юнит если в методе логики ноль и только перекладывание из поля в поле.

еще раз.. юнит тесты как и интеграционные - обязаны фиксировать текущий (ожидаемый) функционал. если они валятся при рефаке ну так окей. это хорошие тесты. поддержка тестов - это отдельная дисциплина.

у тебя никогда не бывало что ты поменял какой то флоу и у тебя попадо половина тестов покрывающих код который ты пошатал? при этом код работает правильно.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715473
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreykaTу тебя никогда не бывало что ты поменял какой то флоу и у тебя попадо половина тестов покрывающих код который ты пошатал? при этом код работает правильно.Реальный кейс: приходит заказчик и говорит "у нас тут все тупит", смотришь что там происходит и видишь: наркоманы реализовали иерархическую структуру и большинство внешних вызовов у них не child-parent, а child-root реализованный через цикл по child-parent; сколько стоит починить? условно день: переделать сохранение child и перемещение root; переделываешь, а потом смотришь что там моков налепили на неделю работы.
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715517
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это называется девелопмент. поздравляю можешь еще все тесты закомментить и сказать заказчику и так сойдет - работает же
...
Рейтинг: 0 / 0
Юнит тест не "полагаясь" на бд. как?
    #39715548
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, насчет структур данных. допустим у тебя есть структура где каждый узел знает только о своих детях но не знает о своих родителях - как ты на родителя переместишься? а? вариант 1) построишь вспомогательную структуру где будешь хранить инфу и о предках (ну или поверх существующей - не важно) вариант 2) пойдешь от рута вниз в поисках детей. оба варианта так себе и имеют как плюсы так и минусы.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Юнит тест не "полагаясь" на бд. как?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]