Как специфицировать операции, которые полагаются на Memcached? - PullRequest
7 голосов
/ 11 мая 2011

У нас есть приложение Rails, которое мы тестируем с помощью RSpec. Мы хотим специфицировать операции, основанные на 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

По этой причине кэширование в этом случае - это не просто хорошее поведение, а ожидаемое поведение и то, что я хочу проверить. Поэтому отключение кеширования не подходит.

Ответы [ 2 ]

2 голосов
/ 23 мая 2011

Тест без заглушки ИМХО!

Последовательность будет выглядеть следующим образом:

  1. Cache.flush # или эквивалентный
  2. Cache.get (slug) .shouldbenull # кэш теста пуст
  3. Method.find_by_slug (slug) .should == 'некоторое значение' # проверить слова метода
  4. Cache.get (slug) .should == 'некоторое значение'# проверить, что кэш имеет значение.

Лично я считаю, что если у вас есть ресурсы под рукой, то заглушка НЕ ​​ДОЛЖНА использоваться.Если у вас нет ресурсов под рукой (т.е. IE сторонней службы), тогда СЛЕДУЕТ использовать заглушки.

Проблема с заглушкой заключается в том, что если вы изменили код, который заглушаете, то вы не будетезнать, если он сломается.

Примером в этом случае может быть, если вы переключились со стандартного гема memcache на Dahli? или на какой-нибудь другой гем memcache, который передавал промахи кэша, возвращая ложное, нулевое или другое значение по-другому,Я имею в виду на самом деле!Cache.set ("my_key", false)!:)

Примером переключения может быть выход из протокола ASCII и переход на более быстрый двоичный протокол.

Memcache - дешевый ресурс, вы можете установить его с 1 Мб оперативной памяти.сделать это тестирование.Я бы даже сказал, что вы можете сделать то же самое для MySQL.Что-нибудь большее чем mysql, тогда я начал бы склоняться к окуркам, поскольку затраты на "настройку" этих ресурсов становятся значительными.YMMV.

-даниель

0 голосов
/ 10 февраля 2014

Похоже, если вы используете Rails.cache.fetch напрямую, ваш лучший вариант - заглушка.Но если вы используете помощников контроллера (которые теперь находятся в отдельных драгоценных камнях в рельсах 4), я наткнулся на этот драгоценный камень, который полезен https://github.com/avit/rspec-rails-caching

...