【发布时间】:2011-10-08 21:51:15
【问题描述】:
我是使用 mixins 的新手,我更熟悉基于 Java 的依赖注入。
假设我使用 mixin 模块为类提供数据库连接,如 http://fabiokung.com/2010/05/06/ruby-and-dependency-injection-in-a-dynamic-world/ 所述:
module ConnectionProvider
def connection
# open a database connection and return it
end
end
# reopening the class to mix the module in
class Repository
include ConnectionProvider
end
这让我可以这样做:
class Repository
def find(id)
connection.execute("SELECT ...")
end
end
现在我不必通过 Repository 初始化程序传入 ConnectionProvider 对象。
假设我想使用模拟版本的 ConnectionProvider 进行测试,因此我想在 Repository 中包含 MockConnectionProvider 而不是 ConnectionProvider。 ConnectionProvider 和 MockConnectionProvider 都提供方法connection。这是我认为应该这样做的方式。
对于我的普通 Rails 应用程序
在 environment.rb 中:
require File.dirname(__FILE__) + "/../lib/repository"
对于我的测试脚本
在我的测试文件中:
require File.dirname(__FILE__) + "/../lib/repository_mocked"
这是正确的吗?如果没有,有人可以提供一篇文章的链接来演示正确的方法吗?
【问题讨论】:
标签: ruby-on-rails mocking mixins