2011-05-11 34 views
7

我們有一個我們用RSpec測試的Rails應用程序。我們希望規範依賴Memcached的操作。這樣做的最佳做法是什麼?如何規範依賴Memcached的操作?

我想通過將所有電話撥到Rails.cache來做到這一點。這是一個好主意嗎?

按@Pan Thomakos建議,我加入約我試圖測試場景之一一些額外的細節:

我們已經在我們的系統帳戶的概念,因此在每次請求我們檢索當前用戶和當前帳戶。由於系統中的帳戶數不多,因此我們將它們全部保存在緩存中並從那裏檢索它們。

def self.find_by_slug(slug) 
    Rails.cache.fetch(Account.cache_key_for_slug(slug), :expires_in => 1.day) { super } 
end 

爲此,緩存在這種情況下,不僅是一個不錯的表現,但預期的行爲,我想測試的東西。因此關閉緩存不會。

+0

如果你提供關於Memcached上的依賴關係的更多信息可能會有所幫助或者您嘗試測試的一些操作。您可以隨時關閉緩存,以便您的測試完全忽略Rails.cache。那是你在找什麼? – 2011-05-11 20:00:36

+0

謝謝。我修改了我的問題。 – arikfr 2011-05-13 06:41:29

回答

2

測試沒有殘留恕我直言!

的順序是這樣的:

  1. Cache.flush#或同等
  2. Cache.get(塞).shouldbe空#測試緩存爲空
  3. Method.find_by_slug(塞)。應該=='一些值'#測試該方法的字
  4. Cache.get(slug).should =='some value'#測試緩存是否有價值。

就我個人而言,我相信如果你手邊有資源,那麼不應該使用存根。如果您手邊沒有資源(IE爲第三方服務),則應使用存根。

存根問題是,如果您更改了存根的代碼,那麼您將不知道它是否中斷。

這種情況下的一個例子是,如果您從標準memcache gem切換到Dahli?或其他一些memcache gem,它們通過以不同的方式返回false,null或其他值來緩存未命中數據。我的意思是真的! Cache.set(「my_key」,false)! :)

切換的一個例子是離開ASCII協議並移動到更快的二進制協議。

Memcache是​​一個便宜的資源,你可以設置它與1兆內存來做這個測試。我甚至會說,你可以爲MySQL做同樣的事情。任何大於mysql的東西,那麼我會開始傾向於扼殺,因爲「設置」這些資源的成本變得很大。因人而異。

-daniel

+0

謝謝!我們開始時沒有剔除,但是在測試之前我們必須確保Memcached正在運行。這不是一個資源問題,但更多的是方便的問題。我們希望能夠儘可能少地設置運行測試。 (拆分爲3條評論使其更具可讀性) – arikfr 2011-05-23 05:59:49

+1

此外,雖然我同意存根有其缺點,但它有一個主要的優勢 - 速度。雖然在這種情況下它並不重要,因爲Memcached在其他情況下速度很快,所以它很重要。 – arikfr 2011-05-23 06:03:06

+0

我想我們需要決定是否需要更可靠的測試或更方便的測試:/也許我們會做兩組測試 - 一組使用Memcached,將用於CI服務器,一組不使用開發人員機器。 – arikfr 2011-05-23 06:03:38

相關問題