Модульное тестирование моей почтовой службы - PullRequest
2 голосов
/ 30 января 2009

Как написать модульный тест для метода, который использует внешний сервис, такой как System.Net.Mail?

Должен ли я просто проверить возвращаемое значение, чтобы увидеть, были ли какие-либо ошибки при отправке электронного письма, и предположить, что оно не было успешно отправлено?

Ответы [ 2 ]

7 голосов
/ 30 января 2009

Создать макет объекта для почтовой службы.

Короче говоря, это будет означать, что вы пишете класс, который может заменить поведение отправки почты. Таким образом, вы можете очень легко создавать различные ситуации для теста: полученная почта, неудачная и т. Д.

Хорошее и краткое введение: http://www.programmersheaven.com/user/pheaven/blog/217-An-Introduction-to-Mock-Objects/

Еще один, с примерами кода: http://blogs.clearscreen.com/ragc/archive/2004/08/31/395.aspx

4 голосов
/ 30 января 2009

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

Однако, если вы действительно хотите проверить отправку почты, вот несколько идей.

  • Используйте SmtpDeliveryLocation для вывода электронного письма в папку вместо почтового сервера. Затем вы можете проверить папку.
  • Отправьте электронное письмо, а затем отправьте запрос на удаленный POP-сервер, чтобы узнать, пришло ли оно.
  • Отправьте и предположите, что это просто сработало, если нет исключений. Я не могу вспомнить, является ли SmtpClient.Send блокирующим или неблокирующим.

Поскольку эти тесты обычно подразумевают общение с внешними вещами, они будут называться интеграционными тестами , а не модульными тестами.

Но в целом, я думаю, вы будете более заинтересованы в том, чтобы правильно указывать адреса форматирования / адреса электронной почты, чем в том, правильно ли Microsoft реализовала SmtpClient. Так что модульное тестирование и макеты имеют больше смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...