在Ruby中,使用Cucumber,我应该模拟对Web服务的调用吗?

时间:2010-05-28 11:03:50

标签: ruby mocking cucumber

所有

我正在使用Cucumber验证Ruby命令行实用程序。该实用程序从Web服务中提取数据。

我理解Cucumber是用于验收测试并测试整个堆栈,但我仍然需要提供来自Web服务的一致回复。

我应该嘲笑网络服务吗?如果有,怎么样?这里最好的方法是什么?

干杯, 戈登

3 个答案:

答案 0 :(得分:2)

经过一番思考后!然后我发现了一些谷歌搜索FakeWeb。完全符合我的需要!

查看Dr Nic's slides - 尤其是幻灯片17。

这很容易 - 在2小时内我设法设置它,重写我的测试,让一切都通过并检查所有回到git hub !!

HTH其他人!

答案 1 :(得分:1)

我对Ruby或Cucumber不是很熟悉,所以我只能给你一个与你的问题相关的非常一般的答案,它实际上有更多的问题而不是答案。

  • 网络服务的可靠性如何?如果它们大量下降会导致您的测试不时失败,没有什么比将测试失败的原因追逐到意识到这是一个月的那个时候。
  • 您的网络服务能否从测试中受到冲击?如果您有多个开发人员经常运行这些测试并且您的Web服务位于合作伙伴公司的服务器上,他们可能不喜欢您对他们进行测试。
  • 你相信他们的输出吗?对我来说,不模仿依赖的最大原因是我不知道我将从服务中获得什么样的数据。如果我使用的文档记录良好且容易理解,我通常不会嘲笑它们,但如果它们不完全清楚或经常更改,我建议对它们进行测试。
  • 模拟依赖项有多难?替换依赖项并不总是很容易,尤其是之后添加测试代码。幸运的是,在动态语言中,它通常比Java说得容易得多。我仍然会考虑建立一个模拟服务需要做多少工作才能回答你真正想要的答案。
  • 我从模拟中获得了多少速度优势?集成测试很慢,模拟Web服务依赖性会让您的测试运行得更快,速度更快?我不知道,但它可能很重要。

这些只是几点,但至少在我选择嘲笑或不嘲笑之前我总是会考虑最后三点。

答案 2 :(得分:0)

网络服务模拟

我会围绕应用程序中对webservice的调用编写一个包装器 伪码中的示例

CallWebService (action, options,...) {
    // Code for connectiong to Webservice
}

然后你只需要模拟那个函数,就像你想要任何其他函数一样

CallWebService (action, options,...) {
    return true;
}

通过这种方式,您可以模拟Web服务,而无需担心它是Web服务或数据库连接等等。你可以让它返回真实或其他任何东西。

测试代码如何处理来自Webservice的响应

为了使这个想法更进一步,使您的测试更加强大,您可以使用某种测试参数或环境参数来控制模拟的Web服务方法中发生的事情。然后,您可以成功测试代码如何处理来自Web服务的不同响应。
再次使用伪代码:

CallWebService (action, options,...) {
    if TEST_WEBSERVICE_PARAMETER == CORRUPT_XML
        return "<xml><</xmy>";
    else if TEST_WEBSERVICE_PARAMETER == TIME_OUT
        return wait(5000);
    else if TEST_WEBSERVICE_PARAMETER == EMPTY_XML
        return "";
    else if TEST_WEBSERVICE_PARAMETER == REALLY_LONG_XML_RESPONSE
        return generate_xml_response(1000000);
}

要匹配的测试:

should_raise_error_on_empty_xml_response_from_webservice() {
    TEST_WEBSERVICE_PARAMETER = EMPTY_XML;
    CallWebService(action, option, ...);
    assert_error_was_raised(EMPTY_RESPONSE_FROM_WEBSERVICE);
    assert_written_in_log(EMPTY_RESPONSE_LOG_MESSAGE);
}
...

等等,你明白了。
请注意,即使我的所有示例都是负面测试用例,这当然也可用于测试肯定的测试用例。

请注意,这是我对类似问题所做答复的副本: Mockup webservice for iPhone

祝你好运