Первый снимок при тестировании приложений Laravel 4 (PHPSpec/BDD против PHPUnit/TDD)
Я слишком долго боролся с этим вопросом. Я знаю, что мне нужно просто прыгать в ту или другую сторону, так как они оба явно жизнеспособные/полезные инструменты, но застряли на заборе, исследуя оба, в течение нескольких недель.
PHPUnit против PHPSpec - что может привести к лучшей долгосрочной ремонтопригодности и методы программирования?
Я поговорил с несколькими опытными PHPUnit → PHPspec конвертирует/пользователи, которые теперь клянутся PHPspec, утверждая, что это способствует лучшему дизайну благодаря его подходу BDD. Однако, поскольку это гораздо более новый инструмент, недостаток сообщества/учебников по сравнению с PHPUnit.
В настоящее время моя разработка PHP сосредоточена вокруг разработки Laravel 4.
Где PHPUnit в основном запекается в структуру Laravel, похоже, что это может быть более простой выбор, но мне очень нравится BDD-аспект PHPSpec. Тем не менее, похоже, что PHPSpec не хочет хорошо играть с настройкой фасада Laravel (который, как я обнаружил, может быть хорошей практикой, чтобы избегать, когда это возможно).
Моя настоящая загадка, какая из них будет с большей вероятностью успешно интегрирована в существующий проект Laravel 4 с нулевым существующим охватом тестирования.
У меня был ранний/короткий удар по интеграции PHPUnit и PHPSpec в существующий проект, но на самом деле просто не было уверенности, с чего начать писать начальные тесты и в конечном итоге отказаться от них.
Я действительно пытаюсь разобраться, какой из них может стоить потратить некоторое время в будущем.
Любые ресурсы/понимание любого, кто испытал оба, будут очень благодарны.
Ответы
Ответ 1
PhpSpec
PhpSpec - это дизайн. Это сделает вашу жизнь тяжелой в начале, если вы не используете TDD (тест-первый подход).
Во время процесса вы узнаете много. Вы также поклянетесь. Многие вещи, которые считаются плохой практикой, невозможны с помощью PhpSpec (например, частичные макеты). Вам нужно будет понять это и принять его. Тестирование фасада Laravel сложно, потому что это не ООП.
Намного сложнее протестировать существующий код с помощью PhpSpec, так как сначала вы должны его проверить (что проще с помощью тестового подхода).
PHPUnit
С другой стороны, PhpUnit - это тестирование. Вы можете использовать его с TDD, BDD или тем, что вы его называете. Но вам это не нужно.
Выбор
Если ваша цель - научиться лучше проектироваться, и вам придается предварительный подход, PhpSpec поможет вам. Если ваша цель - проверить или проверить, PhpUnit - ваш друг.
TDD vs BDD
Это не TDD или BDD. По крайней мере, с точки зрения уровня кода, они одинаковы. BDD начался как TDD-переопределенный, предлагая лучшую терминологию. Теперь это выходит за рамки уровня кода, и это намного больше. В эти дни я предпочитаю использовать термин, предложенный Gojko Adzic - Спецификация по примеру.