我有一个 WCF 服务,它运行并与数据库、文件系统和一些外部 Web 服务交互,然后创建结果并对其进行 Xml 序列化并最终返回它。
我想为这个解决方案编写测试,我正在考虑如何(这一切都使用依赖注入和合同设计)。
我可以采取 3 种主要方法。
1)我可以选择最小的代码/方法单元并为其编写测试。选择一个类并将其与其依赖项(其他类等)隔离开来。虽然它保证了质量,但编写它们需要大量时间,而且速度很慢。
2)只使与外部系统的交互可模拟,并编写一些涵盖从发出请求到响应被序列化并返回的主要场景的测试。这将测试我的类之间的所有交互,但会模拟所有外部资源访问。
3) 我可以设置一个测试环境,在该环境中确实发生与外部 Web 服务的交互、发生文件访问、发生数据库访问等。然后从头到尾编写测试。这需要环境设置和对所有其他系统的依赖才能启动和运行。
关于#1,我认为将时间/金钱/精力投入到为我拥有的每一种方法或代码编写测试上是没有意义的。我的意思是这是浪费时间。
关于#3,由于它依赖于外部资源/系统,因此很难设置和运行。
#2,听起来对我来说是最好的选择。因为它将测试它应该测试的内容。只有我的系统及其所有类和模拟所有其他外部系统。
所以基本上,经过几年的单元测试经验后,我得出的结论是,编写单元测试是一种需要避免的浪费,相反,孤立的系统测试是最好的投资回报。
即使我要先编写测试(TDD)然后是生产代码,我认为仍然#2 是最好的。
您对此有何看法?您会为您的应用程序编写小型单元测试吗?您是否认为这是一种良好的做法和对时间/预算/精力的最佳利用?