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