Как проверить работу IMAP с phpunit? - PullRequest
0 голосов
/ 08 июня 2018

Я новичок в тестировании и работаю в системе (написанной на PHP), которая получает электронную почту с сервера IMAP, исследует сообщения и затем перемещает их в разные почтовые ящики, в зависимости от их содержимого.

Я еще не определился ни с одной библиотекой IMAP.Каков наилучший подход в отношении автоматизированных модульных тестов?

А) Должен ли я макетировать все необходимые объекты для проверки процесса автоматизации без какого-либо реального сервера?Если все объекты являются поддельными, и я хочу протестировать объект почтового ящика, например, если сообщение было перемещено, - тогда у меня есть только проверенный объект, который не предоставляет никаких функций для перемещения сообщения.Правильно ли реализовать какую-то функциональность для перемещения сообщения в фиктивном объекте?Почему-то кажется, что я написал бы много кода и вообще не тестировал бы соответствующую логику, потому что макетированные объекты могут вести себя не так, как настоящие.

B) Должен ли я использовать настоящий сервер IMAP, который содержит несколько тестовых сообщений?Но тогда мне пришлось бы сбрасывать его в исходное состояние после каждого теста.И если когда-нибудь кто-нибудь дотронется до реального почтового ящика, все юнит-тесты могут прерваться.

Спасибо за ваши идеи и помощь.:)

Дополнительная информация: было бы неплохо использовать стороннее программное обеспечение / язык программирования для имитации сервера IMAP, если он предоставляет тот же API, что и настоящая система IMAP.В PHP должна быть только бизнес-логика.

1 Ответ

0 голосов
/ 23 июня 2018

Оказалось, что использование реального сервера слишком медленное.Поэтому я использовал фиктивные объекты и изолировал тестируемые компоненты таким образом, что мне нужно только предоставить объект Message, а затем наблюдать внутреннее состояние системы со шпионами.Таким образом, каждый тест имеет очень специфическую область применения, и это больше единица, чем интеграционный тест.

Я использовал настоящие электронные письма и сохранял их на диске в .eml файлах, я написал утилиту, которая строит из этого макетированный объект.Большинство библиотек imap, которые я изучал, требуют подключения к реальному серверу для извлечения данных и создания объекта сообщения.Так что эта часть немного некрасива, потому что она извлекает данные сообщения совершенно иначе, чем библиотека.

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

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

Также возможно использовать потоковую оболочку, которая имитирует сервер IMAP.

...