我正在开发一个有很多外部服务消息的项目。仅以一种稍微“双曲线”的方式来描述它的一种好方法是系统必须将消息发送到Flicker API,Facebook API和Netflix API的应用程序。在测试之外使用模拟对象,不好的做法?
为了支持断开连接的场景,日志问题,开发人员可用性,配置等......我已经尝试过使用大量使用泛型和表达式树的方法。最终的结果是这样的:
Messenger<NetflixApi>.SendCustom(netflix => netflix.RecommendMovie("my message"));
总的来说,我很高兴与最终结果,但觉得我犯了一个错误,或者忽视与问候测试和断开场景设计主要某处。
在测试过程中,无论是基于自动化,单元还是人为的,我已经实现了一个对象工厂,最初使用DI在“实时模式”下执行正确的操作,并使用Mocks提供一种无菌信使,在测试模式下,什么都做不了。
我只看到或读过关于纯粹TDD模式下使用的Mocks,而不是被用于某种愚蠢的对象。我所看到的方法将围绕存根或嘲讽所使用的所有API所依赖的HTTP通信功能。
我主要关心的是,我希望连接到的所有不同的服务,我最终将不得不做大量细粒度的工作来取代特定的HTTP实现,如果我使用存根方法,我会有3个类用于这些服务(IService,ConcreteService,StubService)以及在实现新方法或更改任何内容时维护这些服务都是真正的PITA。
在目前的实现中,我使用Mocks来免费获得“无菌模式”,几乎不必为了符合某个测试委托人而实施任何额外的任务。
问题是我错过了什么?我以更方便的方式违反了使用Mocks的设计负责人吗?
任何人都可以提供任何建议,如何从许多不同的外部服务中获得无菌模式,而无需跳过很多环节吗?
这个问题有意义吗?
感谢您的所有答案。
编辑#1:
我原来的问题并不清楚。任何null或mock对象都将纯粹用于开发/调试/测试环境。在生产中,发送这些消息的代码将是它们的实际实现。
我投票给每个人,因为似乎有很多不同的解决方案来解决这个问题,我会探索每一个。
请不要认为这个问题已经得到解答,我会尽我所能的赞赏。
第二次我看到这个线程的主题有一个红色的“空对象”警报继续... – abyx 2008-12-15 09:17:35