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

Кто-Нибудь может объяснить почему на практике интеграционные тесты называют юнит

тестами?

Например тут https://github.com/vercel/next.js/blob/canary/test/unit/image-optimizer/get-max-age.test.ts

Этот тест лежит в папке с юнит тестами. Тестируется функция getMaxAge, которая зависит от parseCacheControl. При этом parseCacheControl никак не мокается, следовательно зависимость остается, следовательно это интеграционый тест, а не юнит

15 ответов

28 просмотров

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

Alexander- Автор вопроса

Хорошо. Тогда еще пример: https://github.com/vercel/next.js/blob/canary/test/unit/router-add-base-path.test.ts Тестируется addBasePath, которая зависит от addPathPrefix, которая зависит от normalizePathTrailingSlash (экспортируется из другого файла) Это тоже юнит тест? У них это отнесено к юнит

Alexander- Автор вопроса
Pavel Shakhov (pongo)
а что здесь интеграционного?

внешняя зависимость от normalizePathTrailingSlash

Alexander
внешняя зависимость от normalizePathTrailingSlash

она внутренняя. внешние — это базы данных, файловые системы, сетевые запросы...

Alexander- Автор вопроса
Pavel Shakhov (pongo)
она внутренняя. внешние — это базы данных, файло...

Я теперь не понимаю как определить что внешняя зависимость, а что нет. Если я импортирую fs модуль для работы с файловой системой это внешняя зависимость?

Alexander
Я теперь не понимаю как определить что внешняя зав...

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

Alexander- Автор вопроса
Pavel Shakhov (pongo)
внешней зависимостью будет файл, который тебе необ...

Хорошо. Получается, что если у меня есть огромная библиотека, с миллионом инкапсулированных функций, которая вне отдает только одну функцию, которая вызвает весь этот миллион инкапуслированных функций, то тестирую я эту одну функцию, то я смело могу назвать свой тест юнит тестом, если нет вненшних зависимостей, о которых ты говоришь?

Alexander
Хорошо. Получается, что если у меня есть огромная ...

Юнит это не функция или метод класса. Это некая абстракция, которая инкапсулирует некую бизнес логику.

Alexander- Автор вопроса
🆃🅰🆁🅸🅺 🇺🇦
Юнит это не функция или метод класса. Это некая аб...

Я отталкиваюсь от этого ответа https://t.me/nodejs_ru/738819. Пока не особо понял

Alexander
Хорошо. Получается, что если у меня есть огромная ...

если ты ее мокнешь, то: * тебе придется написать интеграционный тест для работы с этой библиотекой и проверять, что поведение мока соответствует поведению библиотеки, иначе в реальном коде у тебя будет разное поведение. * для всех использований библиотеки придется писать моки и изменять их, если изменится библиотека. * и все равно ты сможешь получить ошибки в реальном коде, потому что пропустил что-то в ее интеграционном тесте. я понимаю идею "в юнит тестах всё надо мокать, чтобы у нас были стабильные зависимости". но эта идея несет в себе издержки. тесты станут хрупкими, их будет тяжелее писать, понимать, поддерживать, а багов в продакшене станет больше. на мой взгляд, гораздо практичнее использовать как можно больше реальных зависимостей.

Alexander
Хорошо. Получается, что если у меня есть огромная ...

если буквально отвечать на твой вопрос, то конечно это все еще юнит тест. он отвечает всем характеристикам юнит теста. https://www.testim.io/blog/unit-test-vs-integration-test/

Alexander
Понял. Спасибо за ссылки

тема непростая. люди по-разному понимают что такое интеграционное тестирование. какого-то канона нет

Alexander- Автор вопроса
Pavel Shakhov (pongo)
тема непростая. люди по-разному понимают что такое...

Да я уже понял. В другом чате тоже задал. Каждый по-своему объясняет

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
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
Карта сайта