【问题标题】:TDD In practice -- How do you write a unit test for sending an email?TDD 在实践中——你如何编写发送电子邮件的单元测试?
【发布时间】:2015-05-12 21:05:31
【问题描述】:
客户说他想要一个按钮,当按下该按钮时,会采用下面的表格并将其作为电子邮件发送。您将如何对此进行单元测试?
假设你是:
- 使用现有的 SMTP 库
- 使用现有的 IMAP 库
据我了解,您可以使用 UI 模拟程序单击按钮,然后等待一分钟左右,然后使用 IMAP 计算收到的消息是否比以前多。但这听起来几乎在每个类别中都违反了 TDD 目标——它不快,它不是原子的,它很复杂,它需要它自己的 IMAP 依赖项。执行此操作的“TDD”方式是什么?
【问题讨论】:
标签:
unit-testing
coding-style
tdd
【解决方案1】:
您想测试您的程序的哪一部分?
请注意我在此处突出显示的内容 - 您想测试您的代码。
除非绝对需要,否则您不会测试您无法控制的事情。所以,我想说,如果你使用 SMTP/IMAP 库——你相信它们会做它们应该做的事情,你不需要编写测试来验证这一点,就像你不检查 File.write() 实际写入文件一样等。
回到您的问题,请研究为电子邮件行为创建和适配器/模拟器。在您的测试中使用内存实现,并在您的生产代码中使用真实的。
Eric Gunnerson 写了一篇关于他们的 good post 并在 github 上发布了 kata