Я пишу свою первую команду Artisan в Laravel 4.1 и хотел получить некоторые идеи о том, как ее протестировать. Моя команда делает одно (пока). Он в основном удаляет записи в таблице (заметки) из базы данных, которая представляет собой заданное количество дней.Laravel 4.1 - Тестирование команды Artisan с Phpunit и Mockery
Пример команды:
OneTimeNote:delete --days=25
Команда работает с летающими цветами. Но я написал команду сначала для учебных целей, и теперь я хочу следовать ей с тестом. Я использую PHPUnit и Mockery.
Код команда: http://pastebin.com/index/dZrxpt8x
Как вы можете видеть, я инъекционный мою реализацию Примечания (абстракцию), а затем я выполнение один из его методы «deleteNotesOlderThan (INT $ дней). Как я уже сказал, все это прекрасно работает и денди. Моя проблема начинается, когда я пытаюсь проверить вещь.
Команда Test: http://pastebin.com/6UwxGvcN
Если вы посмотрите на код, вы можете увидеть, где я застрял. Как я могу скомпоновать мой метод Note и сгенерировать командный тест? И какие вещи я должен тестировать с помощью этой конкретной команды?
Спасибо заранее
Спасибо за помощь. Я пошел вперед и сделал то, что вы предлагали, но с добавленной функциональностью инструментов CommandTester от Symfony. Есть ли у вас какие-либо предложения о том, что я должен проверить с помощью моей конкретной команды? – Pathsofdesign
Вы заметите, что в целом команды в Laravel не делают много. Они откладывают свою * актуальную * функциональность до классов бизнес-логики, которые делают тяжелую работу. Если вы серьезно относитесь к разработке и тестированию кода, вы должны следовать одному и тому же пути. Ваша команда должна просто анализировать аргументы командной строки и передавать все это. Этот класс должен быть протестирован так, чтобы он выполнял то, что ему нужно. В вашем случае можно утверждать, что репозиторий - это дополнительный класс бизнес-логики, поэтому вы можете просто захотеть убедиться, что его метод 'deleteNotesOlderThan' вызывается с правильными аргументами. – alexrussell
Очевидно, что после этого вы должны убедиться, что репозиторий также полностью протестирован, в этом случае вы захотите убедиться, что для данного не издевающегося экземпляра репозитория вызов 'deleteNotesOlderThan' с различными входами делает правильные вещи ,Это слишком легко для людей, чтобы случайно проверить слишком много шляпы, как это делает метод, а не того, что он производит, когда дело доходит до насмешки, даже кодовая база Laravel может быть виновата в этом иногда. Прочтите мой ответ [здесь] (http://stackoverflow.com/a/21752195/1551393) для получения дополнительной информации. Я не эксперт по тестированию, поэтому сделайте то, что вы хотите, с моим советом. – alexrussell