2010-08-16 84 views
2

我想爲iPhone製作應用程序,作爲ObjC和Cocoa中的編程介紹。我是.net開發人員,所以在Mac上進行編程是一個全新的世界,爲我發現:)用於iPhone的樣機web服務

我的應用程序將與Web服務交談。我想使用iCuke作爲測試框架,並且我不想每次運行測試套件都連接到該web服務。那麼,我怎樣才能嘲笑webservice響應測試?一種解決方案可以使用SoapUI,但也許有一些解決方案不使用外部工具。

+0

如果您正在編寫後端,請考慮使用RESTful方法來減少電匯傳輸和處理開銷。我發現了一些適用於iOS的JSON編寫器/解析器,但沒有好的SOAP庫。你將會最接近的是wsdl2objc的噩夢般的代碼生成。 – Justin 2010-08-16 10:53:23

+0

不,我不能使用REST,只能使用純SOAP :( – matma 2010-08-16 10:54:16

回答

1

我會圍繞對應用程序中web服務的調用編寫一個包裝。
實例僞碼

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

然後你只需模擬該函數的只是你想其他任何功能

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

這樣你可以不用理會它是一個web服務嘲笑的WebService的或數據庫連接或其他。你可以讓它返回真實或任何其他。

好運

UPDATE

要採取這樣的想法一步,讓你的測試更加強大,你可以使用某種測試參數或環境參數來控制嘲笑過會發生什麼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); 
} 
... 

等等,你明白了吧。 請注意,我所有的例子都是陰性測試用例,但這當然也可以用來測試陽性測試用例。

+1

我認爲這是一個很好的解決方案,我製作了一個@protocol和兩個實現它的@interface,看起來很有效: ) – matma 2010-08-19 09:56:25

+0

很高興你喜歡這個迴應。我已經用一種使測試更加強大的方法進行了更新,以測試您的系統處理來自Web服務的響應。 – 2010-08-20 06:17:56

1

我不確定我的解決方案是否適合您的需求,但也許我的輸入在這裏有所幫助。 我在我的應用程序中使用了很多不同的web服務,所有這些都使用xml輸出,所以我爲testin的目的所做的就是編寫mock-xml文件,並在我的應用程序中,而不是使用靜態test-xmls使用webservice本身一個網絡服務器。

我這樣做主要是因爲xml輸出已定義,所以我可以實現我的解析器和應用程序的其餘部分,同時服務本身正在同時開發。

+0

,這與我的做法完全一樣 – vodkhang 2010-08-16 10:50:03