全部,在Ruby中,使用Cucumber,我應該嘲笑調用web服務嗎?
我正在使用Cucumber驗收測試Ruby命令行實用程序。該實用程序從web服務中提取數據。
我明白黃瓜是驗收測試和測試整個堆棧,但我仍然需要提供從web服務的一致的答覆。
我應該嘲笑web服務嗎?如果是,如何?這裏最好的方法是什麼?
乾杯, 戈登
全部,在Ruby中,使用Cucumber,我應該嘲笑調用web服務嗎?
我正在使用Cucumber驗收測試Ruby命令行實用程序。該實用程序從web服務中提取數據。
我明白黃瓜是驗收測試和測試整個堆棧,但我仍然需要提供從web服務的一致的答覆。
我應該嘲笑web服務嗎?如果是,如何?這裏最好的方法是什麼?
乾杯, 戈登
所以經過一番思考!然後,我發現FakeWeb有點Google。正是我需要的!
退房Dr Nic's slides - 特別是滑動17
,很容易 - 在不到2小時內,我已經成功地建立起來,重寫我的測試中,得到的一切經過,並檢查它都回來到git的樞紐!
HTH others!
非常好,你得到它的工作!我一定要檢查FakeWeb。 – ponzao 2010-05-28 13:47:07
我不是很熟悉Ruby或黃瓜,所以我只能給你關於你的問題非常普遍的答案,它實際上有問題多於答案。
這些只是幾個點,但至少最後三個我總是考慮之前,選擇嘲笑或不嘲笑。
感謝您的指導ponzao。非常有用的決定是否模擬或不。但它看起來像有人已經爲我做了艱苦的工作。有關詳細信息,請參閱我自己的有關FakeWeb的答案。 – 2010-05-28 13:30:27
嘲笑Webservice的
的我會寫周圍的調用應用程序中的web服務的包裝。
實例僞碼
CallWebService (action, options,...) {
// Code for connectiong to Webservice
}
然後你只需模擬該函數的只是你想其他任何功能
CallWebService (action, options,...) {
return true;
}
這樣你可以不用理會它是一個web服務嘲笑的WebService的或數據庫連接或其他。你可以讓它返回真實或任何其他。
測試你的代碼是如何從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
好運
+1;我和你一樣,除了「測試」Web服務並不總是「起來」,我當然不會對「生產」Web服務測試我的代碼。 – Pretzel 2010-05-28 11:23:43