单元测试我的电子邮件服务

时间:2009-01-30 20:11:21

标签: .net unit-testing

如何为使用System.Net.Mail等外部服务的方法编写单元测试?

我是否只是检查一个返回值,看看发送电子邮件是否有任何错误,并假设它没有成功发送?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:4)

这取决于您想要的测试级别。如果您更关心测试方法,并且电子邮件只是一小部分,那么您可以考虑模拟电子邮件发送服务。 Gerrie 的链接很好。

但是,如果你真的想测试邮件发送,这里有一些想法。

  • 使用SmtpDeliveryLocation将电子邮件输出到文件夹而不是邮件服务器。然后,您可以检查该文件夹。
  • 发送电子邮件,然后查询远程POP服务器以查看它是否到达。
  • 如果没有例外,发送并假设它正常工作。我不记得SmtpClient.Send是阻塞还是非阻塞。

因为这些测试通常意味着与外部事物交谈,所以它们被称为integration tests而不是单元测试。

但总的来说,我认为你更关心的是确保你的格式/电子邮件地址正确,而不是微软是否正确实现了SmtpClient。所以单元测试和模拟在那里更有意义。