Size: a a a

2020 May 05

ЛА

Локоть Анатолий... in Go-go!
Это конечно перебор, но этот пример я привел как вариант того, что юнит тесты всегда быстрые
источник

ЕО

Евгений Омельченко... in Go-go!
Замокан логгер :О
источник

ВС

Владимир Столяров... in Go-go!
Локоть Анатолий
Это не у меня, мне проект достался в таком виде.
Да, в тех юнитах был замокан логгер и его вызовы тестировались. Те новый вызов логгера заставлял переконфигурировать мок
log-driven development
источник

DP

Daniel Podolsky in Go-go!
Локоть Анатолий
Это не у меня, мне проект достался в таком виде.
Да, в тех юнитах был замокан логгер и его вызовы тестировались. Те новый вызов логгера заставлял переконфигурировать мок
мой первый комментарий был “это история про дурачков, которые не хотели учиться писать тесты”
источник

ЛА

Локоть Анатолий... in Go-go!
Евгений Омельченко
Замокан логгер :О
Причем рукописным моком, который поддерживал не всю функциональность оригинального логгера...
источник

AK

Anton Kucherov in Go-go!
Писать юнит тесты тоже надо уметь, что тут еще скажешь. Покрытие это де метрика, оно не должно становится самоцелью
источник

ЕО

Евгений Омельченко... in Go-go!
Daniel Podolsky
мой первый комментарий был “это история про дурачков, которые не хотели учиться писать тесты”
А есть гайды по написанию юнит-тестов?
источник

V

Vitaly in Go-go!
Daniel Podolsky
на 10 попыток внедрения автоматизированных интеграционных - в вашем смысле - тестов удачных - 3, насколько я знаю

я видел автоматизированные интеграционные один раз, и они покрывали только позитивные сценарии - иначе там привет как сложно

но ситуация, когда тесты api прошли, а интеграционные не проходят - она настолько редкая, что об эом обычно не думают
Возможно не очень в тему, но я сталкивался с тем, что документация по сервисам отличается от поведения сервиса.
Моки проходят на ура, а в реальности не работает.

Веселее бывает другое, когда в проде ещё и инфраструктура отличается и (вот прям реальный кейс) перед сервисом воткнут nginx, у коготого гвоздями прибит request timeout и вместо ответа по спеке мы получаем неспецифиципованную HTTP ошибку.

Разработчики тоже, конечно, дурики - не учли, что всегда и везде может прилететь что-то неожиданное и (дело было на java) падали по unhandled exception, но это скорее ответ на то, что интеграционные тесты must have и они должны покрывать неожиданные сценарии (типа отвала базы данных у микросервиса, к которому ты обращаешься).
источник

МП

Мимо Проходящий... in Go-go!
Что ни говори, книга Роя Ошерова  - лучший из учебников по юнит тестам. И там есть целая глава про то, что внутренне состояние алгоритмов проще дебажить чем покрывать тестами. Но покрывать - надёжнее конечно
источник

МП

Мимо Проходящий... in Go-go!
И ещё - для чистых функций можно писать 100% надёжные проперти тесты, а любой юнит тест с моками нельзя считать абсолютно надёжным по определению
источник

AK

Anton Kucherov in Go-go!
Любой тест с моками тестирует "юнит" в изоляции. Тест без моков - интеграционный тест. Означает ли это что юнит-тест нельзя считать надежным? Нет. Означает ли это, что юнит тест не тестирует интеграцию с объектом который замокан? Да. Юнит тест проверяет лишь то, какие параметры были переданы сущности которая замокана, сколько раз была вызвана функция или метод этой сущности и какие результаты она вернула.
источник

BT

Bohdan Turchyk in Go-go!
Anton Kucherov
Любой тест с моками тестирует "юнит" в изоляции. Тест без моков - интеграционный тест. Означает ли это что юнит-тест нельзя считать надежным? Нет. Означает ли это, что юнит тест не тестирует интеграцию с объектом который замокан? Да. Юнит тест проверяет лишь то, какие параметры были переданы сущности которая замокана, сколько раз была вызвана функция или метод этой сущности и какие результаты она вернула.
> без моков = интеграционный
чистые функции не согласны

ну и то, что юнит тест проверяет, сколько раз был вызван мок - дикая завязка на реализацию
источник

AK

Anton Kucherov in Go-go!
Bohdan Turchyk
> без моков = интеграционный
чистые функции не согласны

ну и то, что юнит тест проверяет, сколько раз был вызван мок - дикая завязка на реализацию
Объясните пожалуйста, как эти вещи связаны?
источник

BT

Bohdan Turchyk in Go-go!
почему тест функции без зависимостей (= тест без моков) - интеграционный, а не юнит?
источник

AK

Anton Kucherov in Go-go!
Bohdan Turchyk
почему тест функции без зависимостей (= тест без моков) - интеграционный, а не юнит?
Потому что юнит тестирование предполагает изоляцию юнита от всех зависиомстей.
источник

BT

Bohdan Turchyk in Go-go!
Anton Kucherov
Потому что юнит тестирование предполагает изоляцию юнита от всех зависиомстей.
а если нет зависимостей?)
источник

DP

Daniel Podolsky in Go-go!
у нас нет чистых функций
источник

DP

Daniel Podolsky in Go-go!
что жаль, кстати, но уж как есть
источник

BT

Bohdan Turchyk in Go-go!
ну и я бы не сказал, что юнит тест предполагает *изоляцию* от зависимостей
контроль над ними = да, предполагает
отсюда и моки и стабы
источник

AK

Anton Kucherov in Go-go!
Bohdan Turchyk
а если нет зависимостей?)
Очевидно, если нет зависимостей, нечего мокать. Я понимаю к чему вы ведете, но я выше говорил в контексте когда зависимости присутствуют.
источник