我想爲iPhone製作應用程序,作爲ObjC和Cocoa中的編程介紹。我是.net開發人員,所以在Mac上進行編程是一個全新的世界,爲我發現:)用於iPhone的樣機web服務
我的應用程序將與Web服務交談。我想使用iCuke作爲測試框架,並且我不想每次運行測試套件都連接到該web服務。那麼,我怎樣才能嘲笑webservice響應測試?一種解決方案可以使用SoapUI,但也許有一些解決方案不使用外部工具。
我想爲iPhone製作應用程序,作爲ObjC和Cocoa中的編程介紹。我是.net開發人員,所以在Mac上進行編程是一個全新的世界,爲我發現:)用於iPhone的樣機web服務
我的應用程序將與Web服務交談。我想使用iCuke作爲測試框架,並且我不想每次運行測試套件都連接到該web服務。那麼,我怎樣才能嘲笑webservice響應測試?一種解決方案可以使用SoapUI,但也許有一些解決方案不使用外部工具。
我會圍繞對應用程序中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);
}
...
等等,你明白了吧。 請注意,我所有的例子都是陰性測試用例,但這當然也可以用來測試陽性測試用例。
我認爲這是一個很好的解決方案,我製作了一個@protocol和兩個實現它的@interface,看起來很有效: ) – matma 2010-08-19 09:56:25
很高興你喜歡這個迴應。我已經用一種使測試更加強大的方法進行了更新,以測試您的系統處理來自Web服務的響應。 – 2010-08-20 06:17:56
我不確定我的解決方案是否適合您的需求,但也許我的輸入在這裏有所幫助。 我在我的應用程序中使用了很多不同的web服務,所有這些都使用xml輸出,所以我爲testin的目的所做的就是編寫mock-xml文件,並在我的應用程序中,而不是使用靜態test-xmls使用webservice本身一個網絡服務器。
我這樣做主要是因爲xml輸出已定義,所以我可以實現我的解析器和應用程序的其餘部分,同時服務本身正在同時開發。
,這與我的做法完全一樣 – vodkhang 2010-08-16 10:50:03
如果您正在編寫後端,請考慮使用RESTful方法來減少電匯傳輸和處理開銷。我發現了一些適用於iOS的JSON編寫器/解析器,但沒有好的SOAP庫。你將會最接近的是wsdl2objc的噩夢般的代碼生成。 – Justin 2010-08-16 10:53:23
不,我不能使用REST,只能使用純SOAP :( – matma 2010-08-16 10:54:16