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

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

тестами?

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

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

15 ответов

7 просмотров

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

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)
тема непростая. люди по-разному понимают что такое...

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

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

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

Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
а как ловят такое ghci> res <- getPos2 urlt 0 (alist !! 0) 200 ghci> res SearchAtom (Search "www.google.com" "/search?q=" "Haskell") "haskell.org" (SearchTS [(2024-05-06 07:...
Fedor
14
короче сгенерила мне эта штука код на ассемблере: struc string val { common local .value dq .value .value: if ~val eq db val end if db 0 } fo...
Vi Chapmann Chapmann
12
Есть тут те у кого дети есть + 2 работы + в зал ходят + в семейной жизни все хорошо?
Abdul-Aziz M.
13
Всем привет! Массив вводится с клавиатуры, кол-во элементов неизвестно, поэтому я указал arr db 100 dup(?) С нахождением максимума проблем нет, а вот минимум почему-то всегд...
En Vind Av Sorg
11
кто шарит: mattermost отслеживает что ты на пк запускаешь?
Valentin
13
Помогите, пожалуйста, делаю программу для для подсчёта корней квадратного уравнения, знаю, что есть куча недочётов, недоработок, но основная проблема в том, что почему-то при ...
NYC
13
в сях есть множество как в питоне? для удаление дубликатов
Linus
25
Всем привет! Стоит задачка, выбрать из выпадающего списка конкретный цвет. Пока реализовал через активацию контрола списка и выбора несколькими нажатиями стрелки вправо до нуж...
Роман.С
9
Карта сайта