TDD 实战——如何编写发送电子邮件的单元测试?

TDD In practice -- How do you write a unit test for sending an email?

客户说他想要一个按钮,当按下该按钮时,会采用以下表格并将其作为电子邮件发送。你将如何对此进行单元测试?

假设您是:

据我了解,您可以使用 UI 模拟程序单击按钮,然后等待一分钟左右,然后使用 IMAP 计算是否比之前多收到一条消息。但这听起来几乎在每个类别中都违反了 TDD 目标——它不快,不是原子的,它很复杂,它需要它自己的 IMAP 依赖项。 "TDD" 的方法是什么?

您想测试您的程序的哪一部分?

请注意我在此处突出显示的内容 - 您想要测试您的代码

除非你绝对需要,否则你不会测试你无法控制的事情。所以,我想说,如果你使用 SMTP/IMAP 库——你相信它们会做它们应该做的事情,你不会编写测试来验证这一点,就像你不检查 File.write()实际上写入文件等

回到您的问题,请查看电子邮件行为的创建和 adapter/simulator。在您的测试中使用内存中实现,并在您的生产代码中使用 真实的东西

Eric Gunnerson 写了 good post about them as well as published a kata 到 github