我正在尝试为现有应用编写验收测试。
我遇到了一个问题,但是在调用一个Web服务时,它告诉我们一个人是否在办公室,是什么时间,以及备份是谁。
在大多数测试中,实际调用Web服务很好......是的,理想情况下不应该这样做,但是为这个服务调用多次创建输入和输出是一项巨大的任务。
我想要做的是让Mock生成默认结果而不管输入如何,但是需要根据参数生成代码,因为调用和结果中存在时间数据。
并且,如果我选择,能够在测试场景的测试中为方法的一些选择输入设置不同的结果。
基本上,默认情况下,人们都在办公室。除非我为他们设置模拟不是。
我可以用Moq做到吗?怎么样?
我很擅长编写测试和嘲笑,所以如果您需要更多说明,请询问。
答案 0 :(得分:2)
你可以用Moq或其他动态模拟做到这一点,但听起来不是一个好主意。
您描述需求的方式听起来好像您希望Web服务包含一些非常重要的逻辑 - 可能不像最终生产Web服务那样复杂的逻辑,但至少是一组启发式规则。这对我来说听起来很像Fake而不是Mock。
简而言之,Fake是依赖项的轻量级实现。
另一方面,模拟提供或多或少的预先固定的静态答案输入,同时验证输入是否是预期的。这听起来并不像你描述的那样。简而言之,实现您所描述内容的最佳方法是编写一个轻量级的Web服务,其行为与您描述的一样。如果您需要生成一些虚假的测试数据,可以考虑使用AutoFixture。
答案 1 :(得分:1)
在模拟和存根之间存在一种被误解的差异[Martin Forler:模拟不是存根(http://martinfowler.com/articles/mocksArentStubs.html])。 基本上,模拟对象充当具有机制的对象,该机制允许您验证在某些测试场景中测试的方法(主要是单元测试)是否正确使用对象(即,验证测试的方法是否正确地调用了模拟对象的方法)订购,设置参数并访问属性三次......)。模拟用于在单元测试中测试方法是否正在使用超出其边界的其他对象。 另一方面,存根模拟某些行为(这是我认为你寻求的)。
答案 2 :(得分:1)
您可以尝试使用sourceForge中基于Web的模拟实用程序。该应用程序允许根据特定输入标记值配置选定的响应。
http://sourceforge.net/projects/easymocker
Web Service Mocker是一个易于使用,完全基于Web的SOAP Web服务模拟实用程序。在单元测试,组件集成测试和非功能需求测试期间,该实用程序在SOA开发环境中非常有用。