|
|
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#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 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловandreykaTу тебя никогда не бывало что ты поменял какой то флоу и у тебя попадо половина тестов покрывающих код который ты пошатал? при этом код работает правильно.Реальный кейс: приходит заказчик и говорит "у нас тут все тупит", смотришь что там происходит и видишь: наркоманы реализовали иерархическую структуру и большинство внешних вызовов у них не child-parent, а child-root реализованный через цикл по child-parent; сколько стоит починить? условно день: переделать сохранение child и перемещение root; переделываешь, а потом смотришь что там моков налепили на неделю работы. Я не согласен. Вы в тему модульного тестирования втащили тему тестов перформанса. Нисколько не умаляя их значимости тем не менее я считаю что это совсем другая задача и к топику она имеет далёкое отношение. Там - другие подходы и другие принципы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 14:11 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
maytonЯ не согласен. Вы в тему модульного тестирования втащили тему тестов перформанса. Нисколько не умаляя их значимости тем не менее я считаю что это совсем другая задача и к топику она имеет далёкое отношение. Там - другие подходы и другие принципы. Там речь не о перфомансе. Речь о том, что когда на каждый чих бездумно понатыкано моков, то при малейшей смене сигнатуры метода, тебе надо будет фиксить все места, где этот мок вызывается. Модифицировать тестовые данные и тд. И зачастую на это реально уйдет времени больше чем на фикс. Зато покрытие 100% Вообще я уже отвык конечно от этого, при ФП не надо никаких моков и инжекшенов, все функции pure и total а тестовые данные не хардкодятся а генерируются по алгоритму(если интересно то гуглить про property-based testing) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 14:21 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
ааа. хочу фп! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 14:59 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
забыл никВообще я уже отвык конечно от этого, при ФП не надо никаких моков и инжекшенов, все функции pure и total а тестовые данные не хардкодятся а генерируются по алгоритму(если интересно то гуглить про property-based testing) Круть. Завидую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 18:50 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
Андрей ПанфиловmaytonМоки - это правильный ответ. Но писать хорошие тесты - большое искусство.Моки к хорошим тестам никакого отношения не имеют, потому что все моки выглядят примерно так: Покритикуйте/оцените spring-boot приложение - это зло которое лучше избегать при любом удобном случае. Поскольку это мой проект могу рассказать что база там создаётся каждый раз при старте тестов на travis-ci. Структура заполняется при помощи flyway и тесты запускаются на реальной базе. С уважением, Валентин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 19:04 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 19:10 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
прямо как в 90-е вернулся. раньше так 18 лет назад на пыхе писали. здесь прекрасно всё )) и строк много и хтмл разметка вперемежку с кодом и цсс(вроде) и работа с файлами )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 21:02 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
andreykaT, Мне вот это "понравилось": Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Я конечно понимаю, constructor injection - это хорошо, но в данном случае, слишком много аргументов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 22:30 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
Здесь SonarQube должен ругнутся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 22:57 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
cossack5andreykaT, Мне вот это "понравилось": Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Я конечно понимаю, constructor injection - это хорошо, но в данном случае, слишком много аргументов. клин код говорит что два аргумента это лимит адекватности, три аргумента это трэш угар и израиль. интересно что бы автор сказал про 9 аргументов у конструктора? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2018, 23:42 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
andreykaTинтересно что бы автор сказал про 9 аргументов у конструктора? накатал еще одну главу по рефакторингу :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 12:22 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
chpashaнакатал еще одну главу по рефакторингу :) где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 12:42 |
|
||
|
Юнит тест не "полагаясь" на бд. как?
|
|||
|---|---|---|---|
|
#18+
Tsyklopгде? мы употребляли условное наклонение - то есть, если бы автор увидел такой конструктор, то накатал бы статью, как такое отрефакторить ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 16:07 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2121714]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
180ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 511ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...