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

Всем привет) как часто вы в автотестах объединяте некоторые тесты

в один?
К примеру у вас есть апи ендпоинты по каталогам из вашей бд. Они могут отличаться количеством ключей/значений, типом проверок.
Какой вариант лучше в данном случаи?
1. Написать хелпер/сервис/функцию которая будет делать запрос, получать ответ и в цикле проверять ключи/знаения
2. Вынескти вообще весь блок тестов (it) в функцию, в которой будет код из пункта один.

При этом каталогов может быть 200 штук. Стоит ли их запускать их генерируя it в массиве? Или лучше изолировать их в разные файлы и использовать хелпер/сервис/функцию?

10 ответов

13 просмотров

лучше будет тот вариант, который следует принципу один тест - один ассерт, может даже soft

Roman-Rytikov Автор вопроса
Dmytro Slobodianiuk
лучше будет тот вариант, который следует принципу ...

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

Логику запросов - переиспользовать (по максимуму до тех пор, пока это не ведет к переусложнению кода). Логику проверки ключей/значений - переиспользовать (по максимуму до тех пор, пока это не ведет к переусложнению кода. Тесты - разделять и делать независимыми.

Roman-Rytikov Автор вопроса
Shoo
Логику запросов - переиспользовать (по максимуму ...

Как понять что переусложнил? Это же я писал, я понимаю что там. А вот команда ручников, которую я учу... Вот им уже может быть сложно

Roman Rytikov
Как понять что переусложнил? Это же я писал, я пон...

Ну, более-менее традиционными способами измерения сложности кода является цикломатическая сложность, количество и глубина вложенности логических операторов и общий объём информации в коде (начиная от количества строк и заканчивая количеством сущностей и переменных, которыми оперирует функция/класс/модуль/сервис). Формально, для измерения всего этого добра есть отдельные метрики и инструменты, но обычно это видно даже визуально. Банальный пример, вы говорите что у вас есть Н ручек АПИ со схожей логикой. Предположим, вы написали универсальную функцию, отправляющую запрос на любую из них. В хорошем случае, вы просто компонуете входные параметры в нужном вам порядке и делаете вызов к апи. Код остаётся предельно простым - тут подставили имя эндпоинта, тут параметры. В плохом случае логика того, как делать запрос для этих ручек отличается, и ваша универсальная функция представляет собой набор if/else/switch statements, внутри каждого из которых вы описываете что делать в каком случае. В таком случае становится понятно, что дублирующейся логики между этими запросами не так уж и много, и их проще разделить на разные функции, каждая из которых будет отвечать за свой кусок логики.

Мне кажется тут можно использовать тот же принцип что и в классической разработке (ООП том же). А именно максимально переиспользовать логику и не дублировать Я конечно весьма обще написала но я думаю мысль вы поняли)

Roman-Rytikov Автор вопроса
Jain Shemetova
Мне кажется тут можно использовать тот же принцип ...

Ну так да) они и хотят ООП) проблема в том что написание и потом поддержка этих тестов кем то другим сильно усложняется

Roman Rytikov
Ну так да) они и хотят ООП) проблема в том что нап...

Трачу много сейчас времени не на сами тесты а на архитектуру и на поддержание в будущем. Но время на архитектуру как правило окупается в будущем. Ну и стараюсь писать код максимально просто (без усложнения там где не требуется). Это в будущем очень спасет

Jain Shemetova
Мне кажется тут можно использовать тот же принцип ...

Ну, как вам сказать. Одним из принципов того же ООП является Single Responsibility. Поэтому там тоже тонкая грань между «переиспользовать код» и «не плодить god objects ради недублирующегося кода».

Shoo
Ну, как вам сказать. Одним из принципов того же О...

Это безусловно) есть целая книга этому посвященная

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

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

Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Скажи а ты когда этот канал создавал ты уже дельфи не любил, или это со временем пришло?
Роман Лях (rgreat)
18
Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Привет, такой вопросик появился кажется ли вам что Rust слишком сложный/строгий для высокоуровневого программирования и слишком "безопасный"/строгий для низкоуровневого?
Крокант
10
Карта сайта