Comments 19
Интересно, как проверить, например, функцию, убирающую пробелы и меняющую цифры на точки во входной строке с помощью этого подхода?
Можно ли контролировать inputs и насколько гибко?
Есть ли поддержка моков (например, чтоб замоканный вызов БД также все время возвращал разный ответ)?
Моки при том что если возвращать одно и то же значение из замоканной БД (а именно так чаще всего и делают), то толку в разнообразии входящих данных?
Из того что стало понятно про property-based тесты, вся их мощь в генерации входных данных. Если полагаться на значения по умолчанию, то не факт, что нагенерятся все граничные условия. А если генерить их руками, то парочку "граничных условий обязательно пропустите".
Вообщем поэтому этот метод судя по всему и не прижился, т.к. это по сути то же самое, что все и делают, создавая кучу искусственных кейсов, но в красивой оббертке.
С одной стороны соглашусь, что инициализация моков действительно не проблема. Её можно вынести в отдельную функцию, для которой, возвращаемые моками значения, станут теми же параметрами, которые сможет нагенерировать фреймворк.
Что меня больше беспокоит в этом подходе, так это сложность самих тестов. Она приближается к сложности тестируемой функции, а может и превосходит ее. Какая польза от настолько сложного теста, который в пору покрывать тестами? Кто будет "сторожить сторожей"?
Я бы ещё рекомендовал юзать DI
И если юзаются внешние либы, то не стоит забывать, что в них тоже могут быть баги)
Ну пример со сменой мин кол-ва порций и не должен быть красным. Проверка на условие меньше 2, а не меньше или равно.
Да, всё верно)
А разве не в этом ли суть тестов, что после рефакторинга они все равно остаются зелеными, не зная ничего о том, какой именно был рефакторинг?
Возможно, при следующем рефакторинге из примера выше стоит поработать над магическими числами? А то так можно вечно обновлять циферки то в коде, то в тестах.
"добавить обращение к заглушке вместо реального сервиса "
Если сервис в какой-то момент изменит внутреннюю логику или вывод, то вы об этом из этого теста не узнаете. Поправьте если я не прав.
В таком случае лучше использовать подготовленные данные, сгенерированные ранее сервисом или вам нужен еще один тест, который будет подтверждать, что сервис работает согласно ожиданиям, чтобы тест был валидным.
Три смертных греха автотестов