适用于iPhone的样机网络服务

时间:2010-08-16 10:46:02

标签: iphone testing mocking

我想为iPhone制作一个应用程序,作为ObjC和Cocoa编程的介绍。我是.net开发人员,因此在Mac上编程是一个全新的世界,可以为我发现:)

我的应用程序将与Web服务进行通信。我想使用iCuke作为测试框架,每次运行测试套件时我都不想连接到该Web服务。那么如何模拟web服务响应进行测试呢?一种解决方案可能是使用SoapUI,但也许有一些解决方案不使用外部工具。

2 个答案:

答案 0 :(得分:1)

我不确定我的解决方案是否适合您的需求,但也许我的意见在这里有所帮助。 我在我的应用程序中使用了很多不同的webservices,所有这些都使用了xml输出,所以我为testin目的所做的是编写mock-xml文件并在我的应用程序中而不是使用webservice本身使用静态test-xmls放在一个网络服务器。

我这样做主要是因为xml输出已经定义,因此我可以在同时开发服务本身的同时实现我的解析器和应用程序的其余部分。

答案 1 :(得分:1)

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

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

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

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

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

祝你好运

<强>更新

为了使这个想法更进一步,使您的测试更加强大,您可以使用某种测试参数或环境参数来控制模拟的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);
}
...

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