|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Есть такой вопрос: автор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 я не знаю как более точно перевести. Возможно значение и Зависеть , Полагаться . ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 14:03 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Tsyklop, так нельзя, само понятие юнит-теста подразумевает что тестируется какой-то кусок кода, а слово сервис подразумевает интеграцию, поэтому тестирование сервиса - это интеграционное тестирование ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 14:27 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Андрей Панфилов, Ответ на вопросы выше - никак? я так понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 14:45 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
TsyklopАндрей Панфилов, Ответ на вопросы выше - никак? я так понимаю. Как. Мокаете свой слой работы с БД и вперед. Отдаете эталонный резалт сет, проверяете, что зовутся методы для модификации сущностей с нужными параметрами и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 15:08 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
TsyklopАндрей Панфилов, Ответ на вопросы выше - никак? я так понимаю. Ответ - моканьем всего что вне сервиса ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 15:27 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
TsyklopАндрей Панфилов, Ответ на вопросы выше - никак? я так понимаю.нет, ответ звучит иначе: вопрошающий спрашивает чушь. Развернуть CI чтобы оно само нужные сервисы для интеграционных тестов запускало - это несколько часов работы, моканье базы - это чемодан без ручки, который придется тащить за собой весь проект и плакать кровавыми слезами при любом рефакторинге БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 15:38 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Моки - это правильный ответ. Но писать хорошие тесты - большое искусство. Обычно непонимание теста - это тревожный звоночек о том что в тестируемом коде что то плохо. Single resp. Или принципы слабой связности кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 17:21 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
maytonМоки - это правильный ответ. Но писать хорошие тесты - большое искусство.Моки к хорошим тестам никакого отношения не имеют, потому что все моки выглядят примерно так: Покритикуйте/оцените spring-boot приложение - это зло которое лучше избегать при любом удобном случае. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 17:35 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
У нас юнит-тесты как интеграционные: разворачивается база, накатываются все скрипты, потом прогоняются тесты. Занимает все это дело немало времени. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 18:36 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Андрей ПанфиловmaytonМоки - это правильный ответ. Но писать хорошие тесты - большое искусство.Моки к хорошим тестам никакого отношения не имеют, потому что все моки выглядят примерно так: Покритикуйте/оцените spring-boot приложение - это зло которое лучше избегать при любом удобном случае. где вы там нормальные моки с нормальными тестами увидали? одна из целей тестов - фиксировать текущий функционал. если они эту задачу выполняют - значит это хорошие тесты. если они падают после того как вы поменяли схему базы - значит это хорошие тесты. если вы пошатали кусок кода и тесты упали - значит это снова хорошие тесты. и да - тесты надо поддерживать. равно так же как и писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 20:39 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
cossack5У нас юнит-тесты как интеграционные: разворачивается база, накатываются все скрипты, потом прогоняются тесты. Занимает все это дело немало времени. так если ваши тесты юзают базу - значит они интеграционные )) и да.. собссно везде так. а где так нет - там проект пишут весьма самонадеянные люди. я больше скажу, тупо код писать и рефачить обложенный тестами в разы быстрее и проще. особенно рефачить. просто, порой бывают весьма запутанные флоу или тупо приложение стартует несколько минут, и требует еще мешок сервисов сверху, то без тестов писать код становится тупо нереально. и да, имхо, если юнит тест вылезает с проверкой функционала за пределы класса (ну, или ладно, за пределы инъекций) - это уже интеграционный тест. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.10.2018, 20:42 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
andreykaTгде вы там нормальные моки с нормальными тестами увидали?Нигде, это просто гипертрофированный пример концепции увеличения покрытия кода тестами, что, собственно, моки из себя и представляют: покрытие увеличивается, а толку нет никакого. andreykaTодна из целей тестов - фиксировать текущий функционал. если они эту задачу выполняют - значит это хорошие тесты. если они падают после того как вы поменяли схему базы - значит это хорошие тесты. если вы пошатали кусок кода и тесты упали - значит это снова хорошие тесты. и да - тесты надо поддерживать. равно так же как и писать.Все правда ровно до тех пор, пока это не касается моканья БД - любая встраиваемая БД (типа sqllite или hsqldb) даст 100 очков форы мокам. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 08:10 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Андрей ПанфиловВсе правда ровно до тех пор, пока это не касается моканья БД - любая встраиваемая БД (типа sqllite или hsqldb) даст 100 очков форы мокам. За исключением того, что не сможет представить функционал целевой СУБД... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 09:20 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Невозможно написать внятный тест пока непонятно что тестируется. Поэтому и втаскивать в unit test sqlite и прочие dbms - это оверпроектирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 09:25 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Локшин МаркЗа исключением того, что не сможет представить функционал целевой СУБД...а моки дадут? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 09:30 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Андрей ПанфиловЛокшин МаркЗа исключением того, что не сможет представить функционал целевой СУБД...а моки дадут? Так в том и смысл моков, что им не нужно реализовывать такой функционал. И это и есть ответ на исходный вопрос. Что касается моей практики, то я не стороник ни мокания слоя БД, ни заменой целевой БД на всякие аналоги типа SQLite и H2 т.к. это может привести к ошибкам в продакшене. Простейший пример - переупорядочение Hibernate'ом порядка изменения строк + констрейнты. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 09:51 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Я против замены оригинальной dbms. Это не совсем честное тестирование. Особенно если мы отошли далеко от ansi sql (это часто бывает в ent) и используем plsql/pgsql и прочие процедурные языки. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 09:59 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Tsyklop, Кстати, вот очень известный фреймворк по поводу моков. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 10:38 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
maytonЯ против замены оригинальной dbms. Это не совсем честное тестирование. Особенно если мы отошли далеко от ansi sql (это часто бывает в ent) и используем plsql/pgsql и прочие процедурные языки. полностью согласен. если юнит то мокай вызовы в репу. если интеграционный то юзай ту же самую базу с пустой схемой но такой же. можно не коммитить ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 11:07 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
Андрей ПанфиловandreykaTгде вы там нормальные моки с нормальными тестами увидали?Нигде, это просто гипертрофированный пример концепции увеличения покрытия кода тестами, что, собственно, моки из себя и представляют: покрытие увеличивается, а толку нет никакого. andreykaTодна из целей тестов - фиксировать текущий функционал. если они эту задачу выполняют - значит это хорошие тесты. если они падают после того как вы поменяли схему базы - значит это хорошие тесты. если вы пошатали кусок кода и тесты упали - значит это снова хорошие тесты. и да - тесты надо поддерживать. равно так же как и писать.Все правда ровно до тех пор, пока это не касается моканья БД - любая встраиваемая БД (типа sqllite или hsqldb) даст 100 очков форы мокам. а потом ты заюзаешь какой нибудь хитрый функционал по незнанию своего скулайта, твои тесты начнут проходить, зато тоже самое на реале будет падать про тесты того парня ну они вроде как минимум тестируют контроллер замоканный. никто ж не говорит что этих тестов достаточно. просто такие тесты в идеале должны быть написаны на все публичные методы всех классов. хотя бы такие. и еще интеграционных чуток. где то видал пирамиду тестирования, диаграмму. в общем, треугольник. где в верхушке енд ту енд тесты. посередке интеграционные, а снизу юнит. (шире -- больше количество). я с ней почти согласен. впрочем, в классических спринговых вебсервисах основная логика зашита в сервисном слое и я считаю что там ндо примерно равное количество юнитов и интеграционных. имхо, если достоверно можешь протестировать юнитом -пиши юниты. если не можешь - добавляй интеграционные. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 11:16 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
andreykaTа потом ты заюзаешь какой нибудь хитрый функционал по незнанию своего скулайта, твои тесты начнут проходить, зато тоже самое на реале будет падать моки вообще никаких гарантий не дают, к тому же добавляют головную боль при рефакторинге БД andreykaTпро тесты того парня ну они вроде как минимум тестируют контроллер замоканный. никто ж не говорит что этих тестов достаточно. просто такие тесты в идеале должны быть написаны на все публичные методы всех классов. хотя бы такие. ага, вызываем сетер, через гетер проверяем что выставилось то что нужно - покрытие есть, толку нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 11:30 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
ты просто топишь за интеграционные тесты я с тобой согласен. не вижу смысла писать юнит если в методе логики ноль и только перекладывание из поля в поле. еще раз.. юнит тесты как и интеграционные - обязаны фиксировать текущий (ожидаемый) функционал. если они валятся при рефаке ну так окей. это хорошие тесты. поддержка тестов - это отдельная дисциплина. у тебя никогда не бывало что ты поменял какой то флоу и у тебя попадо половина тестов покрывающих код который ты пошатал? при этом код работает правильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 11:33 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
andreykaTу тебя никогда не бывало что ты поменял какой то флоу и у тебя попадо половина тестов покрывающих код который ты пошатал? при этом код работает правильно.Реальный кейс: приходит заказчик и говорит "у нас тут все тупит", смотришь что там происходит и видишь: наркоманы реализовали иерархическую структуру и большинство внешних вызовов у них не child-parent, а child-root реализованный через цикл по child-parent; сколько стоит починить? условно день: переделать сохранение child и перемещение root; переделываешь, а потом смотришь что там моков налепили на неделю работы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 11:48 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
это называется девелопмент. поздравляю можешь еще все тесты закомментить и сказать заказчику и так сойдет - работает же ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 12:53 |
|
Юнит тест не "полагаясь" на бд. как?
|
|||
---|---|---|---|
#18+
кстати, насчет структур данных. допустим у тебя есть структура где каждый узел знает только о своих детях но не знает о своих родителях - как ты на родителя переместишься? а? вариант 1) построишь вспомогательную структуру где будешь хранить инфу и о предках (ну или поверх существующей - не важно) вариант 2) пойдешь от рута вниз в поисках детей. оба варианта так себе и имеют как плюсы так и минусы. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.10.2018, 13:38 |
|
|
start [/forum/topic.php?fid=59&msg=39715548&tid=2121714]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 340ms |
total: | 493ms |
0 / 0 |