2010-01-13 97 views
3

我正在尝试编写现有应用程序的验收测试。嘲笑web服务调用...有时

虽然在调用Web服务时,我遇到了问题,该服务告诉我们一个人是否在办公室内,是否在办公室,几个小时以及备份的人是谁。

在大多数测试中,实际调用Web服务是好的...是的,理想情况下它不应该,但为许多次这种服务创建输入和输出是一项巨大的任务。

我想要做的是让Mock生成一个默认结果,而不管输入如何,但是它需要由代码根据参数生成,因为在调用和结果中存在临时数据。

而且,如果我选择,可以在测试场景下的测试方法的几个选择输入上设置不同的结果。

基本上,默认情况下,人们在办公室。除非我为他们设置模拟器。

我可以用Moq做到吗?如何?

我很喜欢编写测试和嘲笑,所以如果您需要更多的解释,请询问。

回答

2

你也许可以用Moq或其他动态模拟来做到这一点,但它听起来不像是一个好主意。

您描述您的需求的方式听起来像是您希望Web服务包含非平凡数量的逻辑 - 可能不像最终生产Web服务那样复杂,但至少有一组启发式规则。这听起来很像Fake而不是Mock

简而言之,Fake是依赖关系的轻量级实现。

另一方面,模拟提供或多或少的预先静态的输入答案,同时验证输入是否是预期的。这听起来完全不像你所描述的。

简而言之,实现您所描述的最好方法是编写一个轻量级的Web服务版本,并按照您的描述进行操作。如果您需要生成一些虚假测试数据,则可以考虑使用AutoFixture

+0

我创建了一个假实现,它会在所有常规调用中生成并返回预期的假结果。当我想要有一个特殊情况,比如不在办公室时,它包含一个“缓存”,我可以填充测试结果并在参数匹配时返回。 – CaffGeek 2010-01-13 20:43:04

1

有一个误解的差异bethween嘲弄和存根[马丁Forler:模拟是不是存根(http://martinfowler.com/articles/mocksArentStubs.html] 基本上模拟对象作为与它允许您验证过程中的一些测试场景测试方法的机理对象(主要是单元测试)正确地使用对象(即,验证被测试的方法以正确的顺序调用模拟对象的方法,设置参数并访问属性三次...)。模拟用于测试方法在单元测试中是否使用超出其边界的另一个对象 另一方面,存根正在模拟某些行为(这是我认为你所寻求的)

1

你可以尝试sourceForge的基于web的模拟实用程序。该应用程序允许基于特定输入标签值配置选定的响应。

http://sourceforge.net/projects/easymocker

Web服务莫克是一个易于使用的,完全基于Web的SOAP Web服务嘲讽效用。此实用程序在单元测试,组件集成测试和非功能性需求测试期间在SOA开发环境中非常有用。