2017-05-04 95 views
0

我有一個Rails應用程序,它與依賴位於遠程數據庫中的外部數據的外部api(Salesforce)進行交互。我寫了一個包裝這個代碼的包裝器,以便用戶可以調用get_by_id(id)而不是編寫相應的sql查詢。各種集成的Rails測試

我想測試這段代碼,我不知道該如何去做。我是否應該爲測試敲擊Salesforce後端數據庫,調用真正的方法?或者我應該嘲笑方法調用的結果?我永遠被我應該測試的東西所困惑......

回答

1

您應該像Salesforce的交互一樣寫套件。

測試的一個基本原則是,你的測試不應該因爲外部因素而失敗。但是,您的應用應該能夠從SalesForce的錯誤中恢復。

Rails 4 Test Prescriptions

不幸的是,與第三方Web服務交互引入了 很多複雜的,以我們的測試。連接到Web服務的速度是慢的,甚至比我們已經嘗試的 避免的數據庫連接慢。此外,連接到Web服務需要互聯網 連接...某些外部服務是公開的 - 我們不希望每次運行測試時都向Twitter發佈更新,更不用說向PayPal發佈信用卡付款。

此外,書中有一些準則,

一個假服務器,它在測試期間截取的HTTP請求和 返回一個罐頭響應對象。我們將使用VCR gem ... *一個 適配器,該對象位於客戶端和服務器之間以調解它們之間的訪問。

煙霧測試,從客戶端一直到真正的服務器......對整個交互進行全面的端到端測試。我們不想 想要經常這樣做,因爲前面列出的所有原因,但它的 有用,能夠防範服務器API中的更改。

集成測試,從客戶端到假服務器。 這測試我們應用程序的整個端到端功能,但 使用來自服務器的存根響應。

客戶端單元測試,它在客戶端啓動,並在 適配器中結束。適配器的響應被扼殺,這意味着適配器 甚至沒有僞造服務器調用。這使我們能夠單獨測試我們的 客戶端與服務器API完全分離。

適配器單元測試,該適配器單元測試在適配器中啓動,並在 假服務器中結束。這些測試是鏈條的最後一塊,讓我們 驗證適配器從任何客戶端或 實際的服務器

順便說單獨的行爲,我認爲這本書是一個必須具備