所有
我正在使用Cucumber验证Ruby命令行实用程序。该实用程序从Web服务中提取数据。
我理解Cucumber是用于验收测试并测试整个堆栈,但我仍然需要提供来自Web服务的一致回复。
我应该嘲笑网络服务吗?如果有,怎么样?这里最好的方法是什么?
干杯, 戈登
答案 0 :(得分:2)
经过一番思考后!然后我发现了一些谷歌搜索FakeWeb。完全符合我的需要!
查看Dr Nic's slides - 尤其是幻灯片17。
这很容易 - 在2小时内我设法设置它,重写我的测试,让一切都通过并检查所有回到git hub !!
HTH其他人!
答案 1 :(得分:1)
我对Ruby或Cucumber不是很熟悉,所以我只能给你一个与你的问题相关的非常一般的答案,它实际上有更多的问题而不是答案。
这些只是几点,但至少在我选择嘲笑或不嘲笑之前我总是会考虑最后三点。
答案 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
祝你好运