Правильное модульное тестирование с большими проектами

#php #unit-testing #laravel-5

#php #модульное тестирование #laravel-5

Вопрос:

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

Как вы справляетесь с такой ситуацией? Выполняете ли вы свои тесты по порядку и сохраняете ли состояние для дальнейших тестов? Как вы справляетесь с издевательствами?

Спасибо.

Комментарии:

1. Я не думаю, что то, что вы описали, является модульными тестами. И запуск ваших тестов с помощью phpunit не делает их модульными тестами.

2. В последние дни я много читал о тестировании, и теперь я вижу, что существуют разные уровни тестов, включая унитарный, принятие и интеграцию.

Ответ №1:

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

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

Один из способов сделать это — изолировать зависимости и использовать только логику вашего приложения.

Комментарии:

1. Я надеюсь, вы не возражаете, что я меняю maintainable на unmaintainable . Я примерно на 95% уверен, что это была опечатка.

2. Мы перестраиваем эту систему (слава богу, не с нуля), и я внедряю TDD в рабочий процесс, поэтому сделаю все возможное, чтобы все было изолировано.