2009-01-30 3 views
2

Как написать модульный тест для метода, использующего внешнюю службу, например System.Net.Mail?Модуль Тестирование службы электронной почты

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

ответ

7

Создайте mock object для почтовой службы.

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

Хороший и краткое введение: 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

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

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

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

Поскольку эти тесты обычно означают разговор с внешними вещами, их можно назвать integration tests, а не модульными тестами.

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

+0

Согласовано, это зависит от того, что вы хотите проверить: почтового сервера или бизнес-логики, которая отвечает за создание почты. –