我不熟悉测试和处理系统(用PHP编写),该系统从IMAP服务器获取电子邮件,调查邮件,然后根据邮件内容将邮件移动到不同的邮箱。
我还没有决定使用任何IMAP库。有关自动化单元测试的最佳方法是什么?
A)我是否应该在没有任何真实服务器的情况下模拟所有必要的对象来测试自动化过程?如果所有对象都被模拟,并且我想测试邮箱对象,例如,如果移动了一条消息 - 那么我只有一个模拟对象,它不提供移动消息的功能。实现某些功能以在模拟对象中移动消息是否正确?它在某种程度上感觉我写了很多代码并且根本没有测试任何相关的逻辑,因为模拟的对象可能表现得与真实的不同。
B)我应该使用真正的IMAP服务器来保存一些测试消息吗?但是在每次测试后我都必须将其重置为原始状态。如果有一天有人触摸真实邮箱,所有单元测试都可能会中断。
感谢您的想法和帮助。 :)
附加信息:只要它提供与真实IMAP系统相同的API,就可以使用第三方软件/编程语言来模拟IMAP服务器。只有业务逻辑必须是PHP。
答案 0 :(得分:0)
原来,使用真实服务器太慢了。因此,我使用模拟对象并以一种只需要提供Message
对象的方式隔离了被测组件,然后使用间谍观察了系统的内部状态。因此,每个测试都有一个非常特定的范围,它比集成测试更多是一个单元。
我使用了真实的电子邮件,并将它们保存在.eml
文件中的磁盘上,我编写了一个实用程序,可以从中构建一个模拟对象。我研究过的大多数imap库都需要与真实服务器的连接才能检索数据并构建消息对象。因此,这一部分有点难看,因为它检索的消息数据与库完全不同。
另一方面,与IMAP服务器进行通信是开发和测试该库的目的,因此,如果其公共接口中没有重大更改,那应该没问题。
我还决定了与imap服务器的通信应仅属于手动烟雾测试和集成测试,而无需将其包含在自动化测试中。
也可以使用模仿IMAP服务器的流包装器。
答案 1 :(得分:0)