gpt4 book ai didi

ruby-on-rails - 如何规范依赖 Memcached 的操作?

转载 作者:行者123 更新时间:2023-12-04 12:49:37 27 4
gpt4 key购买 nike

我们有一个使用 RSpec 测试的 Rails 应用程序。我们想要指定依赖于 Memcached 的操作。这样做的最佳做法是什么?

我想通过 stub 所有对 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

出于这个原因,在这种情况下,缓存不仅是一种很好的行为,而且是预期的行为和我想要测试的东西。因此关闭缓存是行不通的。

最佳答案

恕我直言,在没有 stub 的情况下进行测试!

序列如下所示:

  • Cache.flush # 或等效
  • Cache.get(slug).shouldbe null # 测试缓存为空
  • Method.find_by_slug(slug).should == 'some value' # 测试方法词
  • Cache.get(slug).should == 'some value' # 测试缓存是否有值(value)。

  • 就个人而言,我相信如果你手头有资源,那么不应该使用 stub 。如果您手头没有资源(即第 3 方服务),那么应该使用 stub 。

    stub 的问题在于,如果您更改了正在 stub 的代码,那么您将不知道它是否会中断。

    这种情况下的一个例子是,如果您从标准的 memcache gem 切换到 Dahli? 或其他一些通过返回 false、null 或其他一些值来处理缓存未命中的 memcache gem。我是说真的! Cache.set("my_key", false)! :)

    切换的一个例子是离开 ASCII 协议(protocol)并转向更快的二进制协议(protocol)。

    Memcache 是一种廉价资源,您可以使用 1 meg 的内存来设置它来进行此测试。我什至会说你可以对 mysql 做同样的事情。任何比 mysql 更大的东西,然后我会开始倾向于 stub ,因为“设置”这些资源的成本变得很重要。 YMMV。

    -丹尼尔

    关于ruby-on-rails - 如何规范依赖 Memcached 的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5968633/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com