170 похожих чатов

Кто как пишет тесты? снизу вверх или сверху вниз? интеграционные

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

если же писать на всё юнит тесты, то они начнут перекрывать как друг друга, так и интеграционные тесты. будет избыток тестов. есть ли в этом смысл?

42 ответов

42 просмотра
Pavel-Shakhov (pongo) Автор вопроса

и каждый раз вручную тестишь?

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

Pavel-Shakhov (pongo) Автор вопроса

при этом в роутах сервисы и репозитории мокнуты?

+ только стресс-тесты)

Это уже полноценные е2е

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

Pavel-Shakhov (pongo) Автор вопроса

e2e — это вместе с фронтом

Это тестирование приложения от начало до конца. Если ничего не покается, и тестируется все от хттп сервера для внешних сервисов, типа БД, то полное тестирование и выходит. Фронта вообще может не быть

Pavel-Shakhov (pongo) Автор вопроса

вопрос-то такой: е2е тесты дают большое покрытие кода. далее остается юнит тестами закрыть граничные случаи. если же писать на все модули юнит тесты, а потом еще и интеграционные/е2е, то получится избыток тестов, они начнут перекрывать уже протестированное. есть ли в этом смысл? или лучше на е2е сфокусироваться.

можно ити на компроммис и юнитами покрыть критическую бизнес логику с десятком разных тестов на каждую фичу, а все остальное покрыть интеграционными/е2е на 2-4 теста

можно и реплику даже, просто доп.сервисом броадкастить для синхронизации. юзаю тесты прямо на проде в moleculer, выставляя в сервисах флаг version, потом в брокере call('v3.something.list'), хз как можно еще упростить работу

Я до сих пор считаю, что юниты - это проверка на правильную декомпозицию приложения. Они проверяют не то, что система работает, а то, что её части можно изолированно протестировать)

Зависит от того, тестами покрываем легаси или green field

Хорошую архитектуру green field проекта) При правильной декомпозиции можно получить вообще полное покрытие юнитами (кроме entry point файла, который "боевые" зависимости инжектит в апп)

Только е2е)

Pavel-Shakhov (pongo) Автор вопроса

если не легаси?

Тогда сразу с юнитами - на каждую функцию (желательно) - я именно так пишу пакеты на нпм)

Pavel-Shakhov (pongo) Автор вопроса

когда напишем е2е тесты, то они начнут избыточно перекрывать юнит тесты. разве это норм?

Цели у тестов немного разные. е2е тесты не документируют модули и не помогают с их рефакторингом

Норм для green field, ибо, как я писал выше: https://t.me/nodejs_ru/687542

Pavel-Shakhov (pongo) Автор вопроса

не понял насчет рефакторинга. если е2е тест прошел и покрытие кода не снизилось, то значит рефакторинг успешен, раз нет

Да, е2е тест не знает, какие функции каких юнитов он тестирует. Сегодня одни, завтра другие. Он проверяет работу приложения, выполнение в нем сценариев его использования. Юнит тест покрывает юнит, показывая, что этот юнит работает так, как ожидается, и описывая эти ожидания, для его пользователей (других юнитов), позволяя понимать и рефакторинг этот юнит без опасений, что сломается его использование

Ты предлагаешь е2е тестами делать полное покрытие?

Pavel-Shakhov (pongo) Автор вопроса

е2е тесты дают большое покрытие. остатки можно закрыть точечными юнит тестами

А чем юнит от модуля отличается? Что такое модульное тестирование тогда?

У них задачи и покрытие разное

Юнит - это модуль по английски

Package (из npm) - это я под модулем понимаю ЗЫ: есть в английском module/extension - так что не надо

Суть ведь в том, чтоб покрыть тестами весь public API из package npm

Модули приложения могут не публиковаться как пакеты, но не суть, да

Так вот. Я предпочитаю модульное тестирование юнитам)

Без англицизмов это утверждение фактически звучит как "Я предпочитаю модульное тестирование модулям")

У меня юнит - это функция. Если я её не экспортирую из моего package, то она покрыта тестами публичного апи либы 🤷‍♂

а как покарыто публичным апи если она не експортируется?)

Внутри публичного апи вызывается во всех возможных вариантах

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта