我正在使用https://github.com/DATA-DOG/go-sqlmock 并尝试模拟与数据库的连接。
现在,我需要模拟ping命令(出于负载平衡目的)。但是,我找不到有关如何执行此操作的任何信息。
例如,我想编写一个这样的测试
InsertParams
此外,我需要将此模拟对象注入到函数中。假设New(* sql.DB)输出一个新结构。因此它必须与* sql.DB结构兼容。因此,sqlmock似乎是一个不错的选择。但是,我还没有找到模拟ping命令的方法。
有什么办法可以使用这个库吗? 如果没有,是否还有其他数据库/ sql模拟库可以解决问题?
答案 0 :(得分:3)
不,没有“相似之处”。 Ping
和PingContext
方法取决于实现Pinger
接口的驱动程序,因此,例如,期望“ SELECT 1”之类的东西,就无法模仿它。
有already an issue请求添加它。似乎并没有引起太多关注。我怀疑创建PR(可能大约需要3行代码)会大大增加添加该功能的机会。
如果您的目标是使Ping失败,则应该能够通过连接到无效的数据库端点(使用sqlmock或不使用sqlmock)来模仿它。
答案 1 :(得分:2)
您当然可以嘲笑db
本身:
type mockedDB struct {
*sql.DB
}
func (db *mockedDB) Ping() error {
return errors.New("not implemented")
}
func Example_mockedDB_Ping() {
db, _, _ := sqlmock.New()
defer db.Close()
mdb := mockedDB{db}
fmt.Println("mdb.Ping(): ", mdb.Ping())
// Output: mdb.Ping(): not implemented
}
但我不知道这种实验的目的是什么。
您可以用同样的方式将mock
放入新类型并在其上定义ExpectPing
。