Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Юнит тест не "полагаясь" на бд. как? / 25 сообщений из 39, страница 1 из 2
09.10.2018, 14:03
    #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
09.10.2018, 14:27
    #39714926
Андрей Панфилов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Юнит тест не "полагаясь" на бд. как?
Tsyklop,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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