我正在尝试对使用类型的方法进行单元测试,*gorm.DB并且很好奇如何正确定义一个接口,使我能够在不命中数据库的情况下进行测试。
这是我想要做的一个小例子:
type DBProxy interface {
Create(values interface{}) *DBProxy
Update(values interface{}) *DBProxy
}
type TestDB struct{}
func (t *TestDB) Create(values interface{}) *TestDB {
return t
}
func (t *TestDB) Update(values interface{}) *TestDB {
return t
}
func Connect() DBProxy {
return &TestDB{}
}
Run Code Online (Sandbox Code Playgroud)
结果是:
cannot use TestDB literal (type *TestDB) as type DBProxy in return argument:
*TestDB does not implement DBProxy (wrong type for Create method)
have Create(interface {}) *TestDB
want Create(interface {}) *DBProxy
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激!
更新
这是我的实际应用程序代码:
package …Run Code Online (Sandbox Code Playgroud) 尽管据我所知我已正确完成了所有操作,但此计数器缓存似乎无法正常工作。
user.rb:
class User < ActiveRecord::Base
has_many :search_stats, counter_cache: true
end
Run Code Online (Sandbox Code Playgroud)
移民:
class AddSearchStatsCounterCacheToUsers < ActiveRecord::Migration
def up
add_column :users, :search_stats_count, :integer, default: 0, null: false
User.reset_column_information
User.find_each do |u|
u.update_attribute(:search_stats_count, u.search_stats.count)
end
end
def down
remove_column :users, :search_stats_count
end
end
Run Code Online (Sandbox Code Playgroud)
为什么不更新计数器?
user = User.find( user_id )
user.search_stats.create!( search_params: search_params.to_json )
Run Code Online (Sandbox Code Playgroud)